| // RUN: llvm-mc -triple thumbv6m -show-encoding < %s | FileCheck %s |
| |
| .text |
| .thumb |
| |
| // Check that the correct encoding of the add and sub instructions is |
| // selected, for all combinations of flag-setting, condition and 2- or |
| // 3-operand syntax. |
| |
| .arch armv6-m |
| add r0, r0, r1 // T2 |
| add r0, r1 // T2 |
| adds r0, r0, r1 // T1 |
| adds r0, r1 // T1 |
| // CHECK: add r0, r1 @ encoding: [0x08,0x44] |
| // CHECK: add r0, r1 @ encoding: [0x08,0x44] |
| // CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18] |
| // CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18] |
| |
| .arch armv7-m |
| add r0, r0, r1 // T2, T3 |
| add r0, r1 // T2, T3 |
| adds r0, r0, r1 // T1, T3 |
| adds r0, r1 // T1, T3 |
| // CHECK: add r0, r1 @ encoding: [0x08,0x44] |
| // CHECK: add r0, r1 @ encoding: [0x08,0x44] |
| // CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18] |
| // CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18] |
| |
| itttt eq |
| // CHECK: itttt eq @ encoding: [0x01,0xbf] |
| addeq r0, r0, r1 // T1, T2, T3 |
| addeq r0, r1 // T2, T1, T3 |
| addseq r0, r0, r1 // T3 |
| addseq r0, r1 // T3 |
| // NOTE: Both T1 and T2 are valid for these two instructions, which one is |
| // the preferred varies depending on whether the 2- or 3-operand syntax was |
| // used. |
| // CHECK: addeq r0, r0, r1 @ encoding: [0x40,0x18] |
| // CHECK: addeq r0, r1 @ encoding: [0x08,0x44] |
| // CHECK: addseq.w r0, r0, r1 @ encoding: [0x10,0xeb,0x01,0x00] |
| // CHECK: addseq.w r0, r0, r1 @ encoding: [0x10,0xeb,0x01,0x00] |
| |
| .arch armv6-m |
| // NOTE: There is no non-flag-setting sub instruction for v6-M |
| subs r0, r0, r1 // T1, T2 |
| subs r0, r1 // T1, T2 |
| // CHECK: subs r0, r0, r1 @ encoding: [0x40,0x1a] |
| // CHECK: subs r0, r0, r1 @ encoding: [0x40,0x1a] |
| |
| .arch armv7-m |
| sub r0, r0, r1 // T2 |
| sub r0, r1 // T2 |
| subs r0, r0, r1 // T1, T2 |
| subs r0, r1 // T1, T2 |
| // CHECK: sub.w r0, r0, r1 @ encoding: [0xa0,0xeb,0x01,0x00] |
| // CHECK: sub.w r0, r0, r1 @ encoding: [0xa0,0xeb,0x01,0x00] |
| // CHECK: subs r0, r0, r1 @ encoding: [0x40,0x1a] |
| // CHECK: subs r0, r0, r1 @ encoding: [0x40,0x1a] |
| |
| itttt eq |
| // CHECK: itttt eq @ encoding: [0x01,0xbf] |
| subeq r0, r0, r1 // T1, T2 |
| subeq r0, r1 // T1, T2 |
| subseq r0, r0, r1 // T2 |
| subseq r0, r1 // T2 |
| // CHECK: subeq r0, r0, r1 @ encoding: [0x40,0x1a] |
| // CHECK: subeq r0, r0, r1 @ encoding: [0x40,0x1a] |
| // CHECK: subseq.w r0, r0, r1 @ encoding: [0xb0,0xeb,0x01,0x00] |
| // CHECK: subseq.w r0, r0, r1 @ encoding: [0xb0,0xeb,0x01,0x00] |