aboutsummaryrefslogtreecommitdiff
path: root/lib/arm/assemble.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arm/assemble.h')
-rw-r--r--lib/arm/assemble.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/arm/assemble.h b/lib/arm/assemble.h
index 625f464..e6a72d0 100644
--- a/lib/arm/assemble.h
+++ b/lib/arm/assemble.h
@@ -111,3 +111,10 @@ static inline void LDR_PC(struct assemble_ctx ctx, uint32_t dpc) {
if (ctx.pc & 2) // for alignment
op16(ctx.codep, 0xbf00);
}
+
+static inline void ADD_PC(struct assemble_ctx ctx, uint32_t Rd, uint32_t imm12) {
+ if (ctx.thumb)
+ op32(ctx.codep, 0x0000f20f | ((imm12 >> 11) << 10) | (((imm12 & 0x700) >> 8) << 28) | Rd << 24 | (imm12 & 0xff) << 16);
+ else
+ op32(ctx.codep, 0x028f0000 | Rd << 12 | imm12 << 0 | ctx.cond << 28);
+}