1 // RUN: llvm-mc -triple=aarch64-none-linux-gnu < %s | FileCheck %s 2 // RUN: not llvm-mc -mattr=+no-neg-immediates -triple=aarch64-none-linux-gnu < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-NEG-IMM 3 4 add w0, w2, #4096 5 sub w0, w2, #4096 6 // CHECK: add w0, w2, #1, lsl #12 7 // CHECK: sub w0, w2, #1, lsl #12 8 9 add w0, w2, #-4096 10 sub w0, w2, #-4096 11 // CHECK: sub w0, w2, #1, lsl #12 12 // CHECK: add w0, w2, #1, lsl #12 13 14 // CHECK: sub w0, w2, #2, lsl #12 15 // CHECK: sub w0, w2, #2, lsl #12 16 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 17 sub w0, w2, #2, lsl 12 18 add w0, w2, #-2, lsl 12 19 // CHECK: sub x1, x3, #2, lsl #12 20 // CHECK: sub x1, x3, #2, lsl #12 21 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 22 sub x1, x3, #2, lsl 12 23 add x1, x3, #-2, lsl 12 24 // CHECK: sub x1, x3, #4 25 // CHECK: sub x1, x3, #4 26 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 27 sub x1, x3, #4 28 add x1, x3, #-4 29 // CHECK: sub x1, x3, #4095 30 // CHECK: sub x1, x3, #4095 31 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 32 sub x1, x3, #4095, lsl 0 33 add x1, x3, #-4095, lsl 0 34 // CHECK: sub x3, x4, #0 35 sub x3, x4, #0 36 37 // CHECK: add w0, w2, #2, lsl #12 38 // CHECK: add w0, w2, #2, lsl #12 39 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 40 add w0, w2, #2, lsl 12 41 sub w0, w2, #-2, lsl 12 42 // CHECK: add x1, x3, #2, lsl #12 43 // CHECK: add x1, x3, #2, lsl #12 44 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 45 add x1, x3, #2, lsl 12 46 sub x1, x3, #-2, lsl 12 47 // CHECK: add x1, x3, #4 48 // CHECK: add x1, x3, #4 49 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 50 add x1, x3, #4 51 sub x1, x3, #-4 52 // CHECK: add x1, x3, #4095 53 // CHECK: add x1, x3, #4095 54 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 55 add x1, x3, #4095, lsl 0 56 sub x1, x3, #-4095, lsl 0 57 // CHECK: add x2, x5, #0 58 add x2, x5, #0 59 60 // CHECK: subs w0, w2, #2, lsl #12 61 // CHECK: subs w0, w2, #2, lsl #12 62 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 63 subs w0, w2, #2, lsl 12 64 adds w0, w2, #-2, lsl 12 65 // CHECK: subs x1, x3, #2, lsl #12 66 // CHECK: subs x1, x3, #2, lsl #12 67 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 68 subs x1, x3, #2, lsl 12 69 adds x1, x3, #-2, lsl 12 70 // CHECK: subs x1, x3, #4 71 // CHECK: subs x1, x3, #4 72 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 73 subs x1, x3, #4 74 adds x1, x3, #-4 75 // CHECK: subs x1, x3, #4095 76 // CHECK: subs x1, x3, #4095 77 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 78 subs x1, x3, #4095, lsl 0 79 adds x1, x3, #-4095, lsl 0 80 // CHECK: subs x3, x4, #0 81 subs x3, x4, #0 82 83 // CHECK: adds w0, w2, #2, lsl #12 84 // CHECK: adds w0, w2, #2, lsl #12 85 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 86 adds w0, w2, #2, lsl 12 87 subs w0, w2, #-2, lsl 12 88 // CHECK: adds x1, x3, #2, lsl #12 89 // CHECK: adds x1, x3, #2, lsl #12 90 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 91 adds x1, x3, #2, lsl 12 92 subs x1, x3, #-2, lsl 12 93 // CHECK: adds x1, x3, #4 94 // CHECK: adds x1, x3, #4 95 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 96 adds x1, x3, #4 97 subs x1, x3, #-4 98 // CHECK: adds x1, x3, #4095 99 // CHECK: adds x1, x3, #4095 100 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 101 adds x1, x3, #4095, lsl 0 102 subs x1, x3, #-4095, lsl 0 103 // CHECK: adds x2, x5, #0 104 adds x2, x5, #0 105 106 // CHECK: {{adds xzr,|cmn}} x5, #5 107 // CHECK: {{adds xzr,|cmn}} x5, #5 108 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 109 cmn x5, #5 110 cmp x5, #-5 111 // CHECK: {{subs xzr,|cmp}} x6, #4095 112 // CHECK: {{subs xzr,|cmp}} x6, #4095 113 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 114 cmp x6, #4095 115 cmn x6, #-4095 116 // CHECK: {{adds wzr,|cmn}} w7, #5 117 // CHECK: {{adds wzr,|cmn}} w7, #5 118 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 119 cmn w7, #5 120 cmp w7, #-5 121 // CHECK: {{subs wzr,|cmp}} w8, #4095 122 // CHECK: {{subs wzr,|cmp}} w8, #4095 123 // CHECK-NO-NEG-IMM: instruction requires: NegativeImmediates 124 cmp w8, #4095 125 cmn w8, #-4095 126