xref: /llvm-project/llvm/test/MC/PowerPC/ppc64-prefix-align.s (revision 2601b90d8371583a831d2e7ae7307517a767cffe)
1# RUN: llvm-mc -triple powerpc64-unknown-linux-gnu --filetype=obj -o - %s | \
2# RUN:   llvm-objdump -D  -r - | FileCheck --check-prefix=CHECK-BE %s
3# RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu --filetype=obj -o - %s | \
4# RUN:   llvm-objdump -D  -r - | FileCheck --check-prefix=CHECK-LE %s
5
6# The purpose of this test is to make sure that 8 byte instructions do not
7# cross 64 byte boundaries. If an 8 byte instruction is about to cross such
8# a boundary then a nop should be added so that the 8 byte instruction starts
9# 4 bytes later and does not cross the boundary.
10# This instruction is 8 bytes: paddi 1, 2, 8589934576, 0
11# This instruction is 4 bytes: addi 2, 3, 15
12# The branches are also 4 bytes each: beq 0, LAB1 (or LAB2)
13
14beq 0, LAB1               # 4
15beq 1, LAB2               # 8
16# CHECK-BE:       0: 41 82 00 c0        bt 2, 0xc0
17# CHECK-BE-NEXT:  4: 41 86 00 f8        bt 6, 0xfc
18# CHECK-LE:       0: c0 00 82 41        bt 2, 0xc0
19# CHECK-LE-NEXT:  4: f8 00 86 41        bt 6, 0xfc
20paddi 1, 2, 8589934576, 0 # 16
21paddi 1, 2, 8589934576, 0 # 24
22paddi 1, 2, 8589934576, 0 # 32
23paddi 1, 2, 8589934576, 0 # 40
24paddi 1, 2, 8589934576, 0 # 48
25paddi 1, 2, 8589934576, 0 # 56
26addi 2, 3, 15             # 60
27# Below the lines 40: and 44: contain the 8 byte instruction.
28# We check to make sure that the nop is added at 3c: so that the 8 byte
29# instruction can start at 40: which is 64 bytes aligned.
30# CHECK-BE:      38:	38 43 00 0f
31# CHECK-BE-NEXT: 3c:	60 00 00 00 	nop
32# CHECK-BE-NEXT: 40:	06 01 ff ff 38 22 ff f0  paddi 1, 2, 8589934576, 0
33# CHECK-LE:      38:	0f 00 43 38
34# CHECK-LE-NEXT: 3c:	00 00 00 60 	nop
35# CHECK-LE-NEXT: 40:	ff ff 01 06 f0 ff 22 38  paddi 1, 2, 8589934576, 0
36paddi 1, 2, 8589934576, 0
37paddi 1, 2, 8589934576, 0
38paddi 1, 2, 8589934576, 0
39paddi 1, 2, 8589934576, 0
40paddi 1, 2, 8589934576, 0
41paddi 1, 2, 8589934576, 0
42paddi 1, 2, 8589934576, 0
43paddi 1, 2, 8589934576, 0 # 64
44paddi 1, 2, 8589934576, 0
45paddi 1, 2, 8589934576, 0
46paddi 1, 2, 8589934576, 0
47paddi 1, 2, 8589934576, 0
48paddi 1, 2, 8589934576, 0
49paddi 1, 2, 8589934576, 0
50paddi 1, 2, 8589934576, 0
51addi 2, 3, 15             # 60
52# CHECK-BE:      b8:	38 43 00 0f
53# CHECK-BE-NEXT: bc:	60 00 00 00 	nop
54# CHECK-BE:      <LAB1>:
55# CHECK-BE-NEXT: c0:	06 01 ff ff 38 22 ff f0  paddi 1, 2, 8589934576, 0
56# CHECK-LE:      b8:	0f 00 43 38
57# CHECK-LE-NEXT: bc:	00 00 00 60 	nop
58# CHECK-LE:      <LAB1>:
59# CHECK-LE-NEXT: c0:	ff ff 01 06 f0 ff 22 38  paddi 1, 2, 8589934576, 0
60LAB1: paddi 1, 2, 8589934576, 0
61paddi 1, 2, 8589934576, 0
62paddi 1, 2, 8589934576, 0
63paddi 1, 2, 8589934576, 0
64paddi 1, 2, 8589934576, 0
65paddi 1, 2, 8589934576, 0
66paddi 1, 2, 8589934576, 0
67addi 2, 3, 15             # 60
68# CHECK-BE:      f8:	38 43 00 0f
69# CHECK-BE:      <LAB2>:
70# CHECK-BE-NEXT: fc:	60 00 00 00 	nop
71# CHECK-BE-NEXT: 100:	06 01 ff ff 38 22 ff f0  paddi 1, 2, 8589934576, 0
72# CHECK-LE:      f8:	0f 00 43 38
73# CHECK-LE:      <LAB2>:
74# CHECK-LE-NEXT: fc:	00 00 00 60 	nop
75# CHECK-LE-NEXT: 100:	ff ff 01 06 f0 ff 22 38  paddi 1, 2, 8589934576, 0
76LAB2:
77  paddi 1, 2, 8589934576, 0
78
79
80
81