18
18
19
19
#![ allow( warnings) ]
20
20
#![ feature( rustc_attrs) ]
21
- #![ feature( llvm_asm) ]
22
21
#![ crate_type="rlib" ]
23
22
24
-
23
+ use std :: arch :: asm ;
25
24
26
25
// Change template
27
26
#[ cfg( any( cfail1, cfail4) ) ]
28
27
#[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
29
- pub fn change_template ( a : i32 ) -> i32 {
28
+ pub fn change_template ( _a : i32 ) -> i32 {
30
29
let c: i32 ;
31
30
unsafe {
32
- llvm_asm ! ( "add 1, $0"
33
- : "=r" ( c)
34
- : "0" ( a)
35
- :
36
- :
37
- ) ;
31
+ asm ! ( "mov {0}, 1" ,
32
+ out( reg) c
33
+ ) ;
38
34
}
39
35
c
40
36
}
@@ -45,15 +41,12 @@ pub fn change_template(a: i32) -> i32 {
45
41
#[ rustc_clean( cfg="cfail5" , except="hir_owner_nodes, optimized_mir" ) ]
46
42
#[ rustc_clean( cfg="cfail6" ) ]
47
43
#[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
48
- pub fn change_template ( a : i32 ) -> i32 {
44
+ pub fn change_template ( _a : i32 ) -> i32 {
49
45
let c: i32 ;
50
46
unsafe {
51
- llvm_asm ! ( "add 2, $0"
52
- : "=r" ( c)
53
- : "0" ( a)
54
- :
55
- :
56
- ) ;
47
+ asm ! ( "mov {0}, 2" ,
48
+ out( reg) c
49
+ ) ;
57
50
}
58
51
c
59
52
}
@@ -67,12 +60,10 @@ pub fn change_output(a: i32) -> i32 {
67
60
let mut _out1: i32 = 0 ;
68
61
let mut _out2: i32 = 0 ;
69
62
unsafe {
70
- llvm_asm ! ( "add 1, $0"
71
- : "=r" ( _out1)
72
- : "0" ( a)
73
- :
74
- :
75
- ) ;
63
+ asm ! ( "mov {0}, {1}" ,
64
+ out( reg) _out1,
65
+ in( reg) a
66
+ ) ;
76
67
}
77
68
_out1
78
69
}
@@ -87,12 +78,10 @@ pub fn change_output(a: i32) -> i32 {
87
78
let mut _out1: i32 = 0 ;
88
79
let mut _out2: i32 = 0 ;
89
80
unsafe {
90
- llvm_asm ! ( "add 1, $0"
91
- : "=r" ( _out2)
92
- : "0" ( a)
93
- :
94
- :
95
- ) ;
81
+ asm ! ( "mov {0}, {1}" ,
82
+ out( reg) _out2,
83
+ in( reg) a
84
+ ) ;
96
85
}
97
86
_out1
98
87
}
@@ -105,12 +94,10 @@ pub fn change_output(a: i32) -> i32 {
105
94
pub fn change_input ( _a : i32 , _b : i32 ) -> i32 {
106
95
let _out;
107
96
unsafe {
108
- llvm_asm ! ( "add 1, $0"
109
- : "=r" ( _out)
110
- : "0" ( _a)
111
- :
112
- :
113
- ) ;
97
+ asm ! ( "mov {0}, {1}" ,
98
+ out( reg) _out,
99
+ in( reg) _a
100
+ ) ;
114
101
}
115
102
_out
116
103
}
@@ -124,12 +111,10 @@ pub fn change_input(_a: i32, _b: i32) -> i32 {
124
111
pub fn change_input ( _a : i32 , _b : i32 ) -> i32 {
125
112
let _out;
126
113
unsafe {
127
- llvm_asm ! ( "add 1, $0"
128
- : "=r" ( _out)
129
- : "0" ( _b)
130
- :
131
- :
132
- ) ;
114
+ asm ! ( "mov {0}, {1}" ,
115
+ out( reg) _out,
116
+ in( reg) _b
117
+ ) ;
133
118
}
134
119
_out
135
120
}
@@ -142,12 +127,10 @@ pub fn change_input(_a: i32, _b: i32) -> i32 {
142
127
pub fn change_input_constraint ( _a : i32 , _b : i32 ) -> i32 {
143
128
let _out;
144
129
unsafe {
145
- llvm_asm ! ( "add 1, $0"
146
- : "=r" ( _out)
147
- : "0" ( _a) , "r" ( _b)
148
- :
149
- :
150
- ) ;
130
+ asm ! ( "mov {0}, {1}" ,
131
+ out( reg) _out,
132
+ in( reg) _a,
133
+ in( "eax" ) _b) ;
151
134
}
152
135
_out
153
136
}
@@ -161,30 +144,26 @@ pub fn change_input_constraint(_a: i32, _b: i32) -> i32 {
161
144
pub fn change_input_constraint ( _a : i32 , _b : i32 ) -> i32 {
162
145
let _out;
163
146
unsafe {
164
- llvm_asm ! ( "add 1, $0"
165
- : "=r" ( _out)
166
- : "r" ( _a) , "0" ( _b)
167
- :
168
- :
169
- ) ;
147
+ asm ! ( "mov {0}, {1}" ,
148
+ out( reg) _out,
149
+ in( reg) _a,
150
+ in( "ecx" ) _b) ;
170
151
}
171
152
_out
172
153
}
173
154
174
155
175
-
176
156
// Change clobber
177
157
#[ cfg( any( cfail1, cfail4) ) ]
178
158
#[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
179
159
pub fn change_clobber ( _a : i32 ) -> i32 {
180
160
let _out;
181
161
unsafe {
182
- llvm_asm ! ( "add 1, $0"
183
- : "=r" ( _out)
184
- : "0" ( _a)
185
- : /*--*/
186
- :
187
- ) ;
162
+ asm ! ( "mov {0}, {1}" ,
163
+ out( reg) _out,
164
+ in( reg) _a,
165
+ lateout( "ecx" ) _
166
+ ) ;
188
167
}
189
168
_out
190
169
}
@@ -198,12 +177,11 @@ pub fn change_clobber(_a: i32) -> i32 {
198
177
pub fn change_clobber ( _a : i32 ) -> i32 {
199
178
let _out;
200
179
unsafe {
201
- llvm_asm ! ( "add 1, $0"
202
- : "=r" ( _out)
203
- : "0" ( _a)
204
- : "eax"
205
- :
206
- ) ;
180
+ asm ! ( "mov {0}, {1}" ,
181
+ out( reg) _out,
182
+ in( reg) _a,
183
+ lateout( "edx" ) _
184
+ ) ;
207
185
}
208
186
_out
209
187
}
@@ -216,12 +194,11 @@ pub fn change_clobber(_a: i32) -> i32 {
216
194
pub fn change_options ( _a : i32 ) -> i32 {
217
195
let _out;
218
196
unsafe {
219
- llvm_asm ! ( "add 1, $0"
220
- : "=r" ( _out)
221
- : "0" ( _a)
222
- :
223
- : /*-------*/
224
- ) ;
197
+ asm ! ( "mov {0}, {1}" ,
198
+ out( reg) _out,
199
+ in( reg) _a,
200
+ options( readonly) ,
201
+ ) ;
225
202
}
226
203
_out
227
204
}
@@ -235,12 +212,11 @@ pub fn change_options(_a: i32) -> i32 {
235
212
pub fn change_options ( _a : i32 ) -> i32 {
236
213
let _out;
237
214
unsafe {
238
- llvm_asm ! ( "add 1, $0"
239
- : "=r" ( _out)
240
- : "0" ( _a)
241
- :
242
- : "volatile"
243
- ) ;
215
+ asm ! ( "mov {0}, {1}" ,
216
+ out( reg) _out,
217
+ in( reg) _a,
218
+ options( nomem ) ,
219
+ ) ;
244
220
}
245
221
_out
246
222
}
0 commit comments