tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Tinycc-devel] [PATCH] arm-asm: Add movw


From: Danny Milosavljevic
Subject: [Tinycc-devel] [PATCH] arm-asm: Add movw
Date: Sun, 3 Jan 2021 02:31:53 +0100

---
 arm-asm.c | 11 ++++++++++-
 arm-tok.h |  1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/arm-asm.c b/arm-asm.c
index cec1700..53fdc23 100644
--- a/arm-asm.c
+++ b/arm-asm.c
@@ -228,10 +228,18 @@ static void asm_binary_opcode(TCCState *s1, int token)
     if (ops[1].type != OP_REG32) {
         switch (ARM_INSTRUCTION_GROUP(token)) {
         case TOK_ASM_movteq:
+        case TOK_ASM_movweq:
             if (ops[1].type == OP_IM8 || ops[1].type == OP_IM8N || ops[1].type 
== OP_IM32) {
                 if (ops[1].e.v >= 0 && ops[1].e.v <= 0xFFFF) {
                     uint16_t immediate_value = ops[1].e.v;
-                    asm_emit_opcode(token, 0x3400000 | (ops[0].reg << 12) | 
(immediate_value & 0xF000) << 4 | (immediate_value & 0xFFF));
+                    switch (ARM_INSTRUCTION_GROUP(token)) {
+                    case TOK_ASM_movteq:
+                        asm_emit_opcode(token, 0x3400000 | (ops[0].reg << 12) 
| (immediate_value & 0xF000) << 4 | (immediate_value & 0xFFF));
+                        break;
+                    case TOK_ASM_movweq:
+                        asm_emit_opcode(token, 0x3000000 | (ops[0].reg << 12) 
| (immediate_value & 0xF000) << 4 | (immediate_value & 0xFFF));
+                        break;
+                    }
                 } else
                     expect("(source operand) immediate 16 bit value");
             } else
@@ -1134,6 +1142,7 @@ ST_FUNC void asm_opcode(TCCState *s1, int token)
     case TOK_ASM_uxtbeq:
     case TOK_ASM_uxtheq:
     case TOK_ASM_movteq:
+    case TOK_ASM_movweq:
         return asm_binary_opcode(s1, token);
 
     case TOK_ASM_ldreq:
diff --git a/arm-tok.h b/arm-tok.h
index 626e20e..7c1a202 100644
--- a/arm-tok.h
+++ b/arm-tok.h
@@ -70,6 +70,7 @@
  DEF_ASM_CONDED(uxtb)
  DEF_ASM_CONDED(uxth)
  DEF_ASM_CONDED(movt)
+ DEF_ASM_CONDED(movw)
 
  /* multiplication */
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]