1
- //@ revisions: elfv1-be elfv2-be elfv2-le
1
+ //@ revisions: elfv1-be elfv2-be elfv2-le aix
2
2
//@ assembly-output: emit-asm
3
3
//@ compile-flags: -O
4
4
//@[elfv1-be] compile-flags: --target powerpc64-unknown-linux-gnu
7
7
//@[elfv2-be] needs-llvm-components: powerpc
8
8
//@[elfv2-le] compile-flags: --target powerpc64le-unknown-linux-gnu
9
9
//@[elfv2-le] needs-llvm-components: powerpc
10
+ //@[aix] compile-flags: --target powerpc64-ibm-aix
11
+ //@[aix] needs-llvm-components: powerpc
10
12
//@[elfv1-be] filecheck-flags: --check-prefix be
11
13
//@[elfv2-be] filecheck-flags: --check-prefix be
14
+ //@[elfv1-be] filecheck-flags: --check-prefix elf
15
+ //@[elfv2-be] filecheck-flags: --check-prefix elf
16
+ //@[elfv2-le] filecheck-flags: --check-prefix elf
12
17
13
18
#![ feature( no_core, lang_items) ]
14
19
#![ no_std]
@@ -44,6 +49,10 @@ struct FiveU16s(u16, u16, u16, u16, u16);
44
49
struct ThreeU8s ( u8 , u8 , u8 ) ;
45
50
46
51
// CHECK-LABEL: read_large
52
+ // aix: lwz [[REG1:.*]], 16(4)
53
+ // aix-NEXT: lxvd2x 0, 0, 4
54
+ // aix-NEXT: stw [[REG1]], 16(3)
55
+ // aix-NEXT: stxvd2x 0, 0, 3
47
56
// be: lwz [[REG1:.*]], 16(4)
48
57
// be-NEXT: stw [[REG1]], 16(3)
49
58
// be-NEXT: ld [[REG2:.*]], 8(4)
@@ -61,6 +70,10 @@ extern "C" fn read_large(x: &FiveU32s) -> FiveU32s {
61
70
}
62
71
63
72
// CHECK-LABEL: read_medium
73
+ // aix: lhz [[REG1:.*]], 8(4)
74
+ // aix-NEXT: ld [[REG2:.*]], 0(4)
75
+ // aix-NEXT: sth [[REG1]], 8(3)
76
+ // aix-NEXT: std [[REG2]], 0(3)
64
77
// elfv1-be: lhz [[REG1:.*]], 8(4)
65
78
// elfv1-be-NEXT: ld [[REG2:.*]], 0(4)
66
79
// elfv1-be-NEXT: sth [[REG1]], 8(3)
@@ -78,6 +91,10 @@ extern "C" fn read_medium(x: &FiveU16s) -> FiveU16s {
78
91
}
79
92
80
93
// CHECK-LABEL: read_small
94
+ // aix: lbz [[REG1:.*]], 2(4)
95
+ // aix-NEXT: lhz [[REG2:.*]], 0(4)
96
+ // aix-NEXT: stb [[REG1]], 2(3)
97
+ // aix-NEXT: sth [[REG2]], 0(3)
81
98
// elfv1-be: lbz [[REG1:.*]], 2(4)
82
99
// elfv1-be-NEXT: lhz [[REG2:.*]], 0(4)
83
100
// elfv1-be-NEXT: stb [[REG1]], 2(3)
@@ -95,9 +112,17 @@ extern "C" fn read_small(x: &ThreeU8s) -> ThreeU8s {
95
112
}
96
113
97
114
// CHECK-LABEL: write_large
98
- // CHECK: std 3, 0(6)
115
+ // aix: std 3, 48(1)
116
+ // aix-NEXT: rldicl [[REG1:.*]], 5, 32, 32
117
+ // aix-NEXT: std 5, 64(1)
118
+ // aix-NEXT: std 4, 56(1)
119
+ // aix-NEXT: stw [[REG1]], 16(6)
120
+ // aix-NEXT: addi [[REG2:.*]], 1, 48
121
+ // aix-NEXT: lxvd2x 0, 0, [[REG2]]
122
+ // aix-NEXT: stxvd2x 0, 0, 6
123
+ // elf: std 3, 0(6)
99
124
// be-NEXT: rldicl [[REG1:.*]], 5, 32, 32
100
- // CHECK -NEXT: std 4, 8(6)
125
+ // elf -NEXT: std 4, 8(6)
101
126
// be-NEXT: stw [[REG1]], 16(6)
102
127
// elfv2-le-NEXT: stw 5, 16(6)
103
128
// CHECK-NEXT: blr
@@ -107,7 +132,12 @@ extern "C" fn write_large(x: FiveU32s, dest: &mut FiveU32s) {
107
132
}
108
133
109
134
// CHECK-LABEL: write_medium
110
- // CHECK: std 3, 0(5)
135
+ // aix: std 4, 56(1)
136
+ // aix-NEXT: rldicl [[REG1:.*]], 4, 16, 48
137
+ // aix-NEXT: std 3, 48(1)
138
+ // aix-NEXT: std 3, 0(5)
139
+ // aix-NEXT: sth [[REG1]], 8(5)
140
+ // elf: std 3, 0(5)
111
141
// be-NEXT: rldicl [[REG1:.*]], 4, 16, 48
112
142
// be-NEXT: sth [[REG1]], 8(5)
113
143
// elfv2-le-NEXT: sth 4, 8(5)
@@ -118,6 +148,11 @@ extern "C" fn write_medium(x: FiveU16s, dest: &mut FiveU16s) {
118
148
}
119
149
120
150
// CHECK-LABEL: write_small
151
+ // aix: std 3, 48(1)
152
+ // aix-NEXT: rldicl [[REG1:.*]], 3, 16, 48
153
+ // aix-NEXT: sth 3, 0(4)
154
+ // aix-NEXT: lbz 3, 50(1)
155
+ // aix-NEXT: stb [[REG1]], 2(4)
121
156
// be: stb 3, 2(4)
122
157
// be-NEXT: srwi [[REG1:.*]], 3, 8
123
158
// be-NEXT: sth [[REG1]], 0(4)
0 commit comments