diff options
Diffstat (limited to 'sim')
-rw-r--r-- | sim/arm/ChangeLog | 5 | ||||
-rw-r--r-- | sim/arm/armemu.c | 12 | ||||
-rw-r--r-- | sim/testsuite/sim/arm/ChangeLog | 5 | ||||
-rw-r--r-- | sim/testsuite/sim/arm/movw-movt.ms | 53 |
4 files changed, 71 insertions, 4 deletions
diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog index 78f0f3b..8babf09 100644 --- a/sim/arm/ChangeLog +++ b/sim/arm/ChangeLog @@ -1,3 +1,8 @@ +2013-05-07 Jayant Sonar <jayant.sonar@kpitcummins.com> + Kaushik Phatak <Kaushik.Phatak@kpitcummins.com> + + * armemu.c (ARMul_Emulate32): Emulate instructions MOVW and MOVT. + 2012-12-19 Joel Brobecker <brobecker@adacore.com> * COPYING: Update to GPL version 3. diff --git a/sim/arm/armemu.c b/sim/arm/armemu.c index e728813..20a36bc 100644 --- a/sim/arm/armemu.c +++ b/sim/arm/armemu.c @@ -2315,8 +2315,10 @@ check_PMUintr: WRITESDEST (dest); break; - case 0x30: /* TST immed */ - UNDEF_Test; + case 0x30: /* MOVW immed */ + dest = BITS (0, 11); + dest |= (BITS (16, 19) << 12); + WRITEDEST (dest); break; case 0x31: /* TSTP immed */ @@ -2368,8 +2370,10 @@ check_PMUintr: } break; - case 0x34: /* CMP immed */ - UNDEF_Test; + case 0x34: /* MOVT immed */ + dest = BITS (0, 11); + dest |= (BITS (16, 19) << 12); + DEST |= (dest << 16); break; case 0x35: /* CMPP immed */ diff --git a/sim/testsuite/sim/arm/ChangeLog b/sim/testsuite/sim/arm/ChangeLog index 6b909ba..1237d81 100644 --- a/sim/testsuite/sim/arm/ChangeLog +++ b/sim/testsuite/sim/arm/ChangeLog @@ -1,3 +1,8 @@ +2013-05-07 Jayant Sonar <jayant.sonar@kpitcummins.com> + Kaushik Phatak <Kaushik.Phatak@kpitcummins.com> + + * movw-movt.ms: New file: Test movw & movt instructions. + 2011-07-01 Nick Clifton <nickc@redhat.com> PR sim/12737 diff --git a/sim/testsuite/sim/arm/movw-movt.ms b/sim/testsuite/sim/arm/movw-movt.ms new file mode 100644 index 0000000..1be815d --- /dev/null +++ b/sim/testsuite/sim/arm/movw-movt.ms @@ -0,0 +1,53 @@ +# output(): Hello, world.\n +# mach(): all + +# This is a test for movw & movt instructions. +# It emits hello world if movw & movt works appropriately. + + .macro invalid +# This is "undefined" but it's not properly decoded yet. + .word 0x07ffffff +# This is stc which isn't recognized yet. + stc 0,cr0,[r0] + .endm + + .global _start +_start: +# Run some simple insns to confirm the engine is at least working. + nop + +# Skip over output text. + + bl skip_output + +hello_text: + .asciz "Hello, world.\n" + + .p2align 2 +skip_output: + movw r4, #:lower16:hello_text + movt r4, #:upper16:hello_text + +output_next: +# Output a character + mov r0,#3 + mov r1,r4 + swi #0x123456 + +# Load next character, see if done. + add r4,r4,#1 + sub r3,r3,r3 + ldrb r5,[r4,r3] + teq r5,#0 + bne output_next + +done: + mov r0,#0x18 + ldr r1,exit_code + swi #0x123456 + +# If that fails, try to die with an invalid insn. + invalid + +exit_code: + .word 0x20026 |