brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · 991d6ed Raw
299 lines · plain
1// RUN: llvm-mc -triple bpfel --mcpu=v3 --assemble --filetype=obj %s \2// RUN:   | llvm-objdump -d --mattr=+alu32 - \3// RUN:   | FileCheck %s4 5// CHECK: 07 01 00 00 2a 00 00 00	r1 += 0x2a6// CHECK: 0f 21 00 00 00 00 00 00	r1 += r27r1 += 428r1 += r29// CHECK: 17 01 00 00 2a 00 00 00	r1 -= 0x2a10// CHECK: 1f 21 00 00 00 00 00 00	r1 -= r211r1 -= 4212r1 -= r213// CHECK: 27 01 00 00 2a 00 00 00	r1 *= 0x2a14// CHECK: 2f 21 00 00 00 00 00 00	r1 *= r215r1 *= 4216r1 *= r217// CHECK: 37 01 00 00 2a 00 00 00	r1 /= 0x2a18// CHECK: 3f 21 00 00 00 00 00 00	r1 /= r219r1 /= 4220r1 /= r221// CHECK: 47 01 00 00 2a 00 00 00	r1 |= 0x2a22// CHECK: 4f 21 00 00 00 00 00 00	r1 |= r223r1 |= 4224r1 |= r225// CHECK: 57 01 00 00 2a 00 00 00	r1 &= 0x2a26// CHECK: 5f 21 00 00 00 00 00 00	r1 &= r227r1 &= 4228r1 &= r229// CHECK: 67 01 00 00 2a 00 00 00	r1 <<= 0x2a30// CHECK: 6f 21 00 00 00 00 00 00	r1 <<= r231r1 <<= 4232r1 <<= r233// CHECK: 77 01 00 00 2a 00 00 00	r1 >>= 0x2a34// CHECK: 7f 21 00 00 00 00 00 00	r1 >>= r235r1 >>= 4236r1 >>= r237// CHECK: 97 01 00 00 2a 00 00 00	r1 %= 0x2a38// CHECK: 9f 21 00 00 00 00 00 00	r1 %= r239r1 %= 4240r1 %= r241// CHECK: a7 01 00 00 2a 00 00 00	r1 ^= 0x2a42// CHECK: af 21 00 00 00 00 00 00	r1 ^= r243r1 ^= 4244r1 ^= r245// CHECK: b7 01 00 00 2a 00 00 00	r1 = 0x2a46// CHECK: bf 21 00 00 00 00 00 00	r1 = r247r1 = 4248r1 = r249// CHECK: c7 01 00 00 2a 00 00 00	r1 s>>= 0x2a50// CHECK: cf 21 00 00 00 00 00 00	r1 s>>= r251r1 s>>= 4252r1 s>>= r253// CHECK: 87 01 00 00 00 00 00 00	r1 = -r154r1 = -r155 56// CHECK: 18 01 00 00 2a 00 00 00 00 00 00 00 00 00 00 00	r1 = 0x2a ll57r1 = 42 ll58 59// CHECK: 04 01 00 00 2a 00 00 00	w1 += 0x2a60// CHECK: 0c 21 00 00 00 00 00 00	w1 += w261w1 += 4262w1 += w263// CHECK: 14 01 00 00 2a 00 00 00	w1 -= 0x2a64// CHECK: 1c 21 00 00 00 00 00 00	w1 -= w265w1 -= 4266w1 -= w267// CHECK: 24 01 00 00 2a 00 00 00	w1 *= 0x2a68// CHECK: 2c 21 00 00 00 00 00 00	w1 *= w269w1 *= 4270w1 *= w271// CHECK: 34 01 00 00 2a 00 00 00	w1 /= 0x2a72// CHECK: 3c 21 00 00 00 00 00 00	w1 /= w273w1 /= 4274w1 /= w275// CHECK: 44 01 00 00 2a 00 00 00	w1 |= 0x2a76// CHECK: 4c 21 00 00 00 00 00 00	w1 |= w277w1 |= 4278w1 |= w279// CHECK: 54 01 00 00 2a 00 00 00	w1 &= 0x2a80// CHECK: 5c 21 00 00 00 00 00 00	w1 &= w281w1 &= 4282w1 &= w283// CHECK: 64 01 00 00 2a 00 00 00	w1 <<= 0x2a84// CHECK: 6c 21 00 00 00 00 00 00	w1 <<= w285w1 <<= 4286w1 <<= w287// CHECK: 74 01 00 00 2a 00 00 00	w1 >>= 0x2a88// CHECK: 7c 21 00 00 00 00 00 00	w1 >>= w289w1 >>= 4290w1 >>= w291// CHECK: 94 01 00 00 2a 00 00 00	w1 %= 0x2a92// CHECK: 9c 21 00 00 00 00 00 00	w1 %= w293w1 %= 4294w1 %= w295// CHECK: a4 01 00 00 2a 00 00 00	w1 ^= 0x2a96// CHECK: ac 21 00 00 00 00 00 00	w1 ^= w297w1 ^= 4298w1 ^= w299// CHECK: b4 01 00 00 2a 00 00 00	w1 = 0x2a100// CHECK: bc 21 00 00 00 00 00 00	w1 = w2101w1 = 42102w1 = w2103// CHECK: c4 01 00 00 2a 00 00 00	w1 s>>= 0x2a104// CHECK: cc 21 00 00 00 00 00 00	w1 s>>= w2105w1 s>>= 42106w1 s>>= w2107// CHECK: 84 01 00 00 00 00 00 00	w1 = -w1108w1 = -w1109 110// CHECK: dc 01 00 00 10 00 00 00	r1 = be16 r1111// CHECK: dc 02 00 00 20 00 00 00	r2 = be32 r2112// CHECK: dc 03 00 00 40 00 00 00	r3 = be64 r3113r1 = be16 r1114r2 = be32 r2115r3 = be64 r3116// CHECK: d4 01 00 00 10 00 00 00	r1 = le16 r1117// CHECK: d4 02 00 00 20 00 00 00	r2 = le32 r2118// CHECK: d4 03 00 00 40 00 00 00	r3 = le64 r3119r1 = le16 r1120r2 = le32 r2121r3 = le64 r3122// CHECK: 05 00 00 00 00 00 00 00	goto +0x0123goto +0124 125// CHECK: 15 01 00 00 2a 00 00 00	if r1 == 0x2a goto +0x0126// CHECK: 1d 21 00 00 00 00 00 00	if r1 == r2 goto +0x0127if r1 == 42 goto +0128if r1 == r2 goto +0129// CHECK: 55 01 00 00 2a 00 00 00	if r1 != 0x2a goto +0x0130// CHECK: 5d 21 00 00 00 00 00 00	if r1 != r2 goto +0x0131if r1 != 42 goto +0132if r1 != r2 goto +0133// CHECK: 25 01 00 00 2a 00 00 00	if r1 > 0x2a goto +0x0134// CHECK: 2d 21 00 00 00 00 00 00	if r1 > r2 goto +0x0135if r1 > 42 goto +0136if r1 > r2 goto +0137// CHECK: 35 01 00 00 2a 00 00 00	if r1 >= 0x2a goto +0x0138// CHECK: 3d 21 00 00 00 00 00 00	if r1 >= r2 goto +0x0139if r1 >= 42 goto +0140if r1 >= r2 goto +0141// CHECK: 65 01 00 00 2a 00 00 00	if r1 s> 0x2a goto +0x0142// CHECK: 6d 21 00 00 00 00 00 00	if r1 s> r2 goto +0x0143if r1 s> 42 goto +0144if r1 s> r2 goto +0145// CHECK: 75 01 00 00 2a 00 00 00	if r1 s>= 0x2a goto +0x0146// CHECK: 7d 21 00 00 00 00 00 00	if r1 s>= r2 goto +0x0147if r1 s>= 42 goto +0148if r1 s>= r2 goto +0149// CHECK: a5 01 00 00 2a 00 00 00	if r1 < 0x2a goto +0x0150// CHECK: ad 21 00 00 00 00 00 00	if r1 < r2 goto +0x0151if r1 < 42 goto +0152if r1 < r2 goto +0153// CHECK: b5 01 00 00 2a 00 00 00	if r1 <= 0x2a goto +0x0154// CHECK: bd 21 00 00 00 00 00 00	if r1 <= r2 goto +0x0155if r1 <= 42 goto +0156if r1 <= r2 goto +0157// CHECK: c5 01 00 00 2a 00 00 00	if r1 s< 0x2a goto +0x0158// CHECK: cd 21 00 00 00 00 00 00	if r1 s< r2 goto +0x0159if r1 s< 42 goto +0160if r1 s< r2 goto +0161// CHECK: d5 01 00 00 2a 00 00 00	if r1 s<= 0x2a goto +0x0162// CHECK: dd 21 00 00 00 00 00 00	if r1 s<= r2 goto +0x0163if r1 s<= 42 goto +0164if r1 s<= r2 goto +0165 166// CHECK: 16 01 00 00 2a 00 00 00	if w1 == 0x2a goto +0x0167// CHECK: 1e 21 00 00 00 00 00 00	if w1 == w2 goto +0x0168if w1 == 42 goto +0169if w1 == w2 goto +0170// CHECK: 56 01 00 00 2a 00 00 00	if w1 != 0x2a goto +0x0171// CHECK: 5e 21 00 00 00 00 00 00	if w1 != w2 goto +0x0172if w1 != 42 goto +0173if w1 != w2 goto +0174// CHECK: 26 01 00 00 2a 00 00 00	if w1 > 0x2a goto +0x0175// CHECK: 2e 21 00 00 00 00 00 00	if w1 > w2 goto +0x0176if w1 > 42 goto +0177if w1 > w2 goto +0178// CHECK: 36 01 00 00 2a 00 00 00	if w1 >= 0x2a goto +0x0179// CHECK: 3e 21 00 00 00 00 00 00	if w1 >= w2 goto +0x0180if w1 >= 42 goto +0181if w1 >= w2 goto +0182// CHECK: 66 01 00 00 2a 00 00 00	if w1 s> 0x2a goto +0x0183// CHECK: 6e 21 00 00 00 00 00 00	if w1 s> w2 goto +0x0184if w1 s> 42 goto +0185if w1 s> w2 goto +0186// CHECK: 76 01 00 00 2a 00 00 00	if w1 s>= 0x2a goto +0x0187// CHECK: 7e 21 00 00 00 00 00 00	if w1 s>= w2 goto +0x0188if w1 s>= 42 goto +0189if w1 s>= w2 goto +0190// CHECK: a6 01 00 00 2a 00 00 00	if w1 < 0x2a goto +0x0191// CHECK: ae 21 00 00 00 00 00 00	if w1 < w2 goto +0x0192if w1 < 42 goto +0193if w1 < w2 goto +0194// CHECK: b6 01 00 00 2a 00 00 00	if w1 <= 0x2a goto +0x0195// CHECK: be 21 00 00 00 00 00 00	if w1 <= w2 goto +0x0196if w1 <= 42 goto +0197if w1 <= w2 goto +0198// CHECK: c6 01 00 00 2a 00 00 00	if w1 s< 0x2a goto +0x0199// CHECK: ce 21 00 00 00 00 00 00	if w1 s< w2 goto +0x0200if w1 s< 42 goto +0201if w1 s< w2 goto +0202// CHECK: d6 01 00 00 2a 00 00 00	if w1 s<= 0x2a goto +0x0203// CHECK: de 21 00 00 00 00 00 00	if w1 s<= w2 goto +0x0204if w1 s<= 42 goto +0205if w1 s<= w2 goto +0206 207// CHECK: 85 00 00 00 2a 00 00 00	call 0x2a208call +42209// CHECK: 95 00 00 00 00 00 00 00	exit210exit211 212// Note: For the group below w1 is used as a destination for sizes u8, u16, u32.213//       This is disassembler quirk, but is technically not wrong, as there are214//       no different encodings for 'r1 = load' vs 'w1 = load'.215//216// CHECK: 71 21 2a 00 00 00 00 00	w1 = *(u8 *)(r2 + 0x2a)217// CHECK: 69 21 2a 00 00 00 00 00	w1 = *(u16 *)(r2 + 0x2a)218// CHECK: 61 21 2a 00 00 00 00 00	w1 = *(u32 *)(r2 + 0x2a)219// CHECK: 79 21 2a 00 00 00 00 00	r1 = *(u64 *)(r2 + 0x2a)220r1 = *(u8*)(r2 + 42)221r1 = *(u16*)(r2 + 42)222r1 = *(u32*)(r2 + 42)223r1 = *(u64*)(r2 + 42)224 225// Note: For the group below w1 is used as a source for sizes u8, u16, u32.226//       This is disassembler quirk, but is technically not wrong, as there are227//       no different encodings for 'store r1' vs 'store w1'.228//229// CHECK: 73 12 2a 00 00 00 00 00	*(u8 *)(r2 + 0x2a) = w1230// CHECK: 6b 12 2a 00 00 00 00 00	*(u16 *)(r2 + 0x2a) = w1231// CHECK: 63 12 2a 00 00 00 00 00	*(u32 *)(r2 + 0x2a) = w1232// CHECK: 7b 12 2a 00 00 00 00 00	*(u64 *)(r2 + 0x2a) = r1233*(u8*)(r2 + 42) = r1234*(u16*)(r2 + 42) = r1235*(u32*)(r2 + 42) = r1236*(u64*)(r2 + 42) = r1237 238// CHECK: c3 21 01 00 00 00 00 00	lock *(u32 *)(r1 + 0x1) += w2239// CHECK: c3 21 01 00 50 00 00 00	lock *(u32 *)(r1 + 0x1) &= w2240// CHECK: c3 21 01 00 40 00 00 00	lock *(u32 *)(r1 + 0x1) |= w2241// CHECK: c3 21 01 00 a0 00 00 00	lock *(u32 *)(r1 + 0x1) ^= w2242lock *(u32*)(r1 + 1) += w2243lock *(u32*)(r1 + 1) &= w2244lock *(u32*)(r1 + 1) |= w2245lock *(u32*)(r1 + 1) ^= w2246// CHECK: db 21 01 00 00 00 00 00	lock *(u64 *)(r1 + 0x1) += r2247// CHECK: db 21 01 00 50 00 00 00	lock *(u64 *)(r1 + 0x1) &= r2248// CHECK: db 21 01 00 40 00 00 00	lock *(u64 *)(r1 + 0x1) |= r2249// CHECK: db 21 01 00 a0 00 00 00	lock *(u64 *)(r1 + 0x1) ^= r2250lock *(u64*)(r1 + 1) += r2251lock *(u64*)(r1 + 1) &= r2252lock *(u64*)(r1 + 1) |= r2253lock *(u64*)(r1 + 1) ^= r2254// CHECK: c3 01 00 00 01 00 00 00	w0 = atomic_fetch_add((u32 *)(r1 + 0x0), w0)255// CHECK: c3 01 00 00 51 00 00 00	w0 = atomic_fetch_and((u32 *)(r1 + 0x0), w0)256// CHECK: c3 01 00 00 a1 00 00 00	w0 = atomic_fetch_xor((u32 *)(r1 + 0x0), w0)257// CHECK: c3 01 00 00 41 00 00 00	w0 = atomic_fetch_or((u32 *)(r1 + 0x0), w0)258w0 = atomic_fetch_add((u32 *)(r1 + 0), w0)259w0 = atomic_fetch_and((u32 *)(r1 + 0), w0)260w0 = atomic_fetch_xor((u32 *)(r1 + 0), w0)261w0 = atomic_fetch_or((u32 *)(r1 + 0), w0)262// CHECK: db 01 00 00 01 00 00 00	r0 = atomic_fetch_add((u64 *)(r1 + 0x0), r0)263// CHECK: db 01 00 00 51 00 00 00	r0 = atomic_fetch_and((u64 *)(r1 + 0x0), r0)264// CHECK: db 01 00 00 a1 00 00 00	r0 = atomic_fetch_xor((u64 *)(r1 + 0x0), r0)265// CHECK: db 01 00 00 41 00 00 00	r0 = atomic_fetch_or((u64 *)(r1 + 0x0), r0)266r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)267r0 = atomic_fetch_and((u64 *)(r1 + 0), r0)268r0 = atomic_fetch_xor((u64 *)(r1 + 0), r0)269r0 = atomic_fetch_or((u64 *)(r1 + 0), r0)270// CHECK: c3 01 00 00 e1 00 00 00	w0 = xchg32_32(r1 + 0x0, w0)271// CHECK: db 01 00 00 e1 00 00 00	r0 = xchg_64(r1 + 0x0, r0)272w0 = xchg32_32(r1 + 0, w0)273r0 = xchg_64(r1 + 0, r0)274// CHECK: c3 11 00 00 f1 00 00 00	w0 = cmpxchg32_32(r1 + 0x0, w0, w1)275// CHECK: db 11 00 00 f1 00 00 00	r0 = cmpxchg_64(r1 + 0x0, r0, r1)276w0 = cmpxchg32_32(r1 + 0, w0, w1)277r0 = cmpxchg_64(r1 + 0, r0, r1)278 279// CHECK: 30 00 00 00 2a 00 00 00	r0 = *(u8 *)skb[0x2a]280// CHECK: 28 00 00 00 2a 00 00 00	r0 = *(u16 *)skb[0x2a]281// CHECK: 20 00 00 00 2a 00 00 00	r0 = *(u32 *)skb[0x2a]282r0 = *(u8*)skb[42]283r0 = *(u16*)skb[42]284r0 = *(u32*)skb[42]285 286// CHECK: 50 10 00 00 00 00 00 00	r0 = *(u8 *)skb[r1]287// CHECK: 48 10 00 00 00 00 00 00	r0 = *(u16 *)skb[r1]288// CHECK: 40 10 00 00 00 00 00 00	r0 = *(u32 *)skb[r1]289r0 = *(u8*)skb[r1]290r0 = *(u16*)skb[r1]291r0 = *(u32*)skb[r1]292 293// CHECK: bf 10 01 00 01 00 00 00	r0 = addr_space_cast(r1, 0x0, 0x1)294// CHECK: bf 21 01 00 00 00 01 00	r1 = addr_space_cast(r2, 0x1, 0x0)295// CHECK: bf 43 01 00 2a 00 07 00	r3 = addr_space_cast(r4, 0x7, 0x2a)296r0 = addr_space_cast(r1, 0, 1)297r1 = addr_space_cast(r2, 1, 0)298r3 = addr_space_cast(r4, 7, 42)299