Thumb2 assembly parsing and encoding for LDR pre-indexed w/ writeback.
[oota-llvm.git] / test / MC / ARM / basic-thumb2-instructions.s
index c9a9a112174a307042236b5ab1648af3955a6db4..c88eb24f284323995c42135f410feba0976f17b8 100644 (file)
@@ -356,6 +356,261 @@ _func:
 @ CHECK: cmp.w r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
 
 
+@------------------------------------------------------------------------------
+@ DBG
+@------------------------------------------------------------------------------
+        dbg #5
+        dbg #0
+        dbg #15
+
+@ CHECK: dbg   #5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
+@ CHECK: dbg   #0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
+@ CHECK: dbg   #15                     @ encoding: [0xaf,0xf3,0xff,0x80]
+
+
+@------------------------------------------------------------------------------
+@ DMB
+@------------------------------------------------------------------------------
+        dmb sy
+        dmb st
+        dmb sh
+        dmb ish
+        dmb shst
+        dmb ishst
+        dmb un
+        dmb nsh
+        dmb unst
+        dmb nshst
+        dmb osh
+        dmb oshst
+        dmb
+
+@ CHECK: dmb   sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
+@ CHECK: dmb   st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
+@ CHECK: dmb   ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
+@ CHECK: dmb   ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
+@ CHECK: dmb   ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
+@ CHECK: dmb   ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
+@ CHECK: dmb   nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
+@ CHECK: dmb   nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
+@ CHECK: dmb   nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
+@ CHECK: dmb   nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
+@ CHECK: dmb   osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
+@ CHECK: dmb   oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
+@ CHECK: dmb   sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ DSB
+@------------------------------------------------------------------------------
+        dsb sy
+        dsb st
+        dsb sh
+        dsb ish
+        dsb shst
+        dsb ishst
+        dsb un
+        dsb nsh
+        dsb unst
+        dsb nshst
+        dsb osh
+        dsb oshst
+        dsb
+
+@ CHECK: dsb   sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
+@ CHECK: dsb   st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
+@ CHECK: dsb   ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
+@ CHECK: dsb   ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
+@ CHECK: dsb   ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
+@ CHECK: dsb   ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
+@ CHECK: dsb   nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
+@ CHECK: dsb   nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
+@ CHECK: dsb   nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
+@ CHECK: dsb   nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
+@ CHECK: dsb   osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
+@ CHECK: dsb   oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
+@ CHECK: dsb   sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ EOR
+@------------------------------------------------------------------------------
+        eor r4, r5, #0xf000
+        eor r4, r5, r6
+        eor r4, r5, r6, lsl #5
+        eor r4, r5, r6, lsr #5
+        eor r4, r5, r6, lsr #5
+        eor r4, r5, r6, asr #5
+        eor r4, r5, r6, ror #5
+
+@ CHECK: eor   r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
+@ CHECK: eor.w r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
+@ CHECK: eor.w r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
+@ CHECK: eor.w r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
+@ CHECK: eor.w r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
+@ CHECK: eor.w r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
+@ CHECK: eor.w r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
+
+
+@------------------------------------------------------------------------------
+@ ISB
+@------------------------------------------------------------------------------
+        isb sy
+        isb
+
+@ CHECK: isb   sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
+@ CHECK: isb   sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ LDMIA
+@------------------------------------------------------------------------------
+        ldmia.w r4, {r4, r5, r8, r9}
+        ldmia.w r4, {r5, r6}
+        ldmia.w r5!, {r3, r8}
+        ldm.w r4, {r4, r5, r8, r9}
+        ldm.w r4, {r5, r6}
+        ldm.w r5!, {r3, r8}
+        ldm.w r5!, {r1, r2}
+        ldm.w r2, {r1, r2}
+
+        ldmia r4, {r4, r5, r8, r9}
+        ldmia r4, {r5, r6}
+        ldmia r5!, {r3, r8}
+        ldm r4, {r4, r5, r8, r9}
+        ldm r4, {r5, r6}
+        ldm r5!, {r3, r8}
+        ldmfd r5!, {r3, r8}
+
+@ CHECK: ldm.w r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
+@ CHECK: ldm.w r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
+
+@ CHECK: ldm.w r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ LDMDB
+@------------------------------------------------------------------------------
+        ldmdb r4, {r4, r5, r8, r9}
+        ldmdb r4, {r5, r6}
+        ldmdb r5!, {r3, r8}
+        ldmea r5!, {r3, r8}
+
+@ CHECK: ldmdb r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
+@ CHECK: ldmdb r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
+@ CHECK: ldmdb r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
+@ CHECK: ldmdb r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ LDR(immediate)
+@------------------------------------------------------------------------------
+        ldr r5, [r5, #-4]
+        ldr r5, [r6, #32]
+        ldr r5, [r6, #33]
+        ldr r5, [r6, #257]
+        ldr.w pc, [r7, #257]
+
+@ CHECK: ldr   r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
+@ CHECK: ldr   r5, [r6, #32]           @ encoding: [0x35,0x6a]
+@ CHECK: ldr.w r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
+@ CHECK: ldr.w r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
+@ CHECK: ldr.w pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ LDR(literal)
+@------------------------------------------------------------------------------
+        ldr.w r5, _foo
+
+@ CHECK: ldr.w r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
+            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ LDR(register)
+@------------------------------------------------------------------------------
+        ldr r1, [r8, r1]
+        ldr.w r4, [r5, r2]
+        ldr r6, [r0, r2, lsl #3]
+        ldr r8, [r8, r2, lsl #2]
+        ldr r7, [sp, r2, lsl #1]
+        ldr r7, [sp, r2, lsl #0]
+        ldr r2, [r4, #255]!
+        ldr r8, [sp, #4]!
+        ldr lr, [sp, #-4]!
+
+@ CHECK: ldr.w r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
+@ CHECK: ldr.w r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
+@ CHECK: ldr.w r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
+@ CHECK: ldr.w r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
+@ CHECK: ldr.w r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
+@ CHECK: ldr.w r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
+@ CHECK: ldr   r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
+@ CHECK: ldr   r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
+@ CHECK: ldr   lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
+
+
+@------------------------------------------------------------------------------
+@ LDRB(immediate)
+@------------------------------------------------------------------------------
+        ldrb r5, [r5, #-4]
+        ldrb r5, [r6, #32]
+        ldrb r5, [r6, #33]
+        ldrb r5, [r6, #257]
+        ldrb.w lr, [r7, #257]
+
+@ CHECK: ldrb  r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
+@ CHECK: ldrb.w        r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
+@ CHECK: ldrb.w        r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
+@ CHECK: ldrb.w        r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
+@ CHECK: ldrb.w        lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ LDRB(register)
+@------------------------------------------------------------------------------
+        ldrb r1, [r8, r1]
+        ldrb.w r4, [r5, r2]
+        ldrb r6, [r0, r2, lsl #3]
+        ldrb r8, [r8, r2, lsl #2]
+        ldrb r7, [sp, r2, lsl #1]
+        ldrb r7, [sp, r2, lsl #0]
+
+@ CHECK: ldrb.w        r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
+@ CHECK: ldrb.w        r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
+@ CHECK: ldrb.w        r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
+@ CHECK: ldrb.w        r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
+@ CHECK: ldrb.w        r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
+@ CHECK: ldrb.w        r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ LDRBT
+@------------------------------------------------------------------------------
+        ldrbt r1, [r2]
+        ldrbt r1, [r8, #0]
+        ldrbt r1, [r8, #3]
+        ldrbt r1, [r8, #255]
+
+@ CHECK: ldrbt r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
+@ CHECK: ldrbt r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
+@ CHECK: ldrbt r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
+@ CHECK: ldrbt r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
+
+
 @------------------------------------------------------------------------------
 @ IT
 @------------------------------------------------------------------------------