tinycc-devel
[Top][All Lists]
Advanced

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

[Tinycc-devel] [PATCH 1/1] arm-asm: Add movt


From: Danny Milosavljevic
Subject: [Tinycc-devel] [PATCH 1/1] arm-asm: Add movt
Date: Fri, 1 Jan 2021 14:34:37 +0100

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

diff --git a/arm-asm.c b/arm-asm.c
index 6eb680a..1aeb28c 100644
--- a/arm-asm.c
+++ b/arm-asm.c
@@ -226,7 +226,19 @@ static void asm_binary_opcode(TCCState *s1, int token)
         tcc_warning("Using 'sp' as operand with '%s' is deprecated by ARM", 
get_tok_str(token, NULL));
 
     if (ops[1].type != OP_REG32) {
-        expect("(source operand) register");
+        switch (ARM_INSTRUCTION_GROUP(token)) {
+        case TOK_ASM_movteq:
+            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)
+                    asm_emit_opcode(token, 0x3400000 | (ops[0].reg << 12) | 
ops[1].e.v);
+                else
+                    expect("(source operand) immediate 16 bit value");
+            } else
+                expect("(source operand) immediate");
+            break;
+        default:
+            expect("(source operand) register");
+        }
         return;
     }
 
@@ -1120,6 +1132,7 @@ ST_FUNC void asm_opcode(TCCState *s1, int token)
     case TOK_ASM_sxtheq:
     case TOK_ASM_uxtbeq:
     case TOK_ASM_uxtheq:
+    case TOK_ASM_movteq:
         return asm_binary_opcode(s1, token);
 
     case TOK_ASM_ldreq:
diff --git a/arm-tok.h b/arm-tok.h
index 6d2483b..626e20e 100644
--- a/arm-tok.h
+++ b/arm-tok.h
@@ -69,6 +69,7 @@
  DEF_ASM_CONDED(sxth)
  DEF_ASM_CONDED(uxtb)
  DEF_ASM_CONDED(uxth)
+ DEF_ASM_CONDED(movt)
 
  /* multiplication */
 



reply via email to

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