1
1
//@ add-core-stubs
2
- //@ revisions: linux win macos thumb
2
+ //@ revisions: linux win_x86 win_i686 macos thumb
3
3
//
4
4
//@[linux] compile-flags: --target x86_64-unknown-linux-gnu
5
5
//@[linux] needs-llvm-components: x86
6
- //@[win] compile-flags: --target x86_64-pc-windows-gnu
7
- //@[win] needs-llvm-components: x86
6
+ //@[win_x86] compile-flags: --target x86_64-pc-windows-gnu
7
+ //@[win_x86] needs-llvm-components: x86
8
+ //@[win_i686] compile-flags: --target i686-pc-windows-gnu
9
+ //@[win_i686] needs-llvm-components: x86
8
10
//@[macos] compile-flags: --target aarch64-apple-darwin
9
11
//@[macos] needs-llvm-components: arm
10
12
//@[thumb] compile-flags: --target thumbv7em-none-eabi
@@ -19,10 +21,11 @@ use minicore::*;
19
21
20
22
// linux,win: .intel_syntax
21
23
//
22
- // linux: .pushsection .text.naked_empty,\22ax\22, @progbits
23
- // macos: .pushsection __TEXT,__text,regular,pure_instructions
24
- // win: .pushsection .text.naked_empty,\22xr\22
25
- // thumb: .pushsection .text.naked_empty,\22ax\22, %progbits
24
+ // linux: .pushsection .text.naked_empty,\22ax\22, @progbits
25
+ // macos: .pushsection __TEXT,__text,regular,pure_instructions
26
+ // win_x86: .pushsection .text.naked_empty,\22xr\22
27
+ // win_i686: .pushsection .text._naked_empty,\22xr\22
28
+ // thumb: .pushsection .text.naked_empty,\22ax\22, %progbits
26
29
//
27
30
// CHECK: .balign 4
28
31
//
@@ -34,10 +37,12 @@ use minicore::*;
34
37
//
35
38
// linux: .type naked_empty, @function
36
39
//
37
- // win: .def naked_empty
38
- // win: .scl 2
39
- // win: .type 32
40
- // win: .endef naked_empty
40
+ // win_x86: .def naked_empty
41
+ // win_i686: .def _naked_empty
42
+ //
43
+ // win_x86,win_i686: .scl 2
44
+ // win_x86,win_i686: .type 32
45
+ // win_x86,win_i686: .endef
41
46
//
42
47
// thumb: .type naked_empty, %function
43
48
// thumb: .thumb
@@ -66,10 +71,11 @@ pub unsafe extern "C" fn naked_empty() {
66
71
67
72
// linux,win: .intel_syntax
68
73
//
69
- // linux: .pushsection .text.naked_with_args_and_return,\22ax\22, @progbits
70
- // macos: .pushsection __TEXT,__text,regular,pure_instructions
71
- // win: .pushsection .text.naked_with_args_and_return,\22xr\22
72
- // thumb: .pushsection .text.naked_with_args_and_return,\22ax\22, %progbits
74
+ // linux: .pushsection .text.naked_with_args_and_return,\22ax\22, @progbits
75
+ // macos: .pushsection __TEXT,__text,regular,pure_instructions
76
+ // win_x86: .pushsection .text.naked_with_args_and_return,\22xr\22
77
+ // win_i686: .pushsection .text._naked_with_args_and_return,\22xr\22
78
+ // thumb: .pushsection .text.naked_with_args_and_return,\22ax\22, %progbits
73
79
//
74
80
// CHECK: .balign 4
75
81
//
@@ -81,18 +87,20 @@ pub unsafe extern "C" fn naked_empty() {
81
87
//
82
88
// linux: .type naked_with_args_and_return, @function
83
89
//
84
- // win: .def naked_with_args_and_return
85
- // win: .scl 2
86
- // win: .type 32
87
- // win: .endef naked_with_args_and_return
90
+ // win_x86: .def naked_with_args_and_return
91
+ // win_i686: .def _naked_with_args_and_return
92
+ //
93
+ // win_x86,win_i686: .scl 2
94
+ // win_x86,win_i686: .type 32
95
+ // win_x86,win_i686: .endef
88
96
//
89
97
// thumb: .type naked_with_args_and_return, %function
90
98
// thumb: .thumb
91
99
// thumb: .thumb_func
92
100
//
93
101
// CHECK-LABEL: naked_with_args_and_return:
94
102
//
95
- // linux, win : lea rax, [rdi + rsi]
103
+ // linux, win_x86,win_i686 : lea rax, [rdi + rsi]
96
104
// macos: add x0, x0, x1
97
105
// thumb: adds r0, r0, r1
98
106
//
@@ -124,10 +132,10 @@ pub unsafe extern "C" fn naked_with_args_and_return(a: isize, b: isize) -> isize
124
132
}
125
133
}
126
134
127
- // linux: .pushsection .text.some_different_name,\22ax\22, @progbits
128
- // macos: .pushsection .text.some_different_name,regular,pure_instructions
129
- // win : .pushsection .text.some_different_name,\22xr\22
130
- // thumb: .pushsection .text.some_different_name,\22ax\22, %progbits
135
+ // linux: .pushsection .text.some_different_name,\22ax\22, @progbits
136
+ // macos: .pushsection .text.some_different_name,regular,pure_instructions
137
+ // win_x86,win_i686 : .pushsection .text.some_different_name,\22xr\22
138
+ // thumb: .pushsection .text.some_different_name,\22ax\22, %progbits
131
139
// CHECK-LABEL: test_link_section:
132
140
#[ no_mangle]
133
141
#[ naked]
@@ -139,3 +147,19 @@ pub unsafe extern "C" fn test_link_section() {
139
147
#[ cfg( all( target_arch = "arm" , target_feature = "thumb-mode" ) ) ]
140
148
naked_asm ! ( "bx lr" ) ;
141
149
}
150
+
151
+ // win_x86: .def fastcall_cc
152
+ // win_i686: .def @fastcall_cc@4
153
+ //
154
+ // win_x86,win_i686: .scl 2
155
+ // win_x86,win_i686: .type 32
156
+ // win_x86,win_i686: .endef
157
+ //
158
+ // win_x86-LABEL: fastcall_cc:
159
+ // win_i686-LABEL: @fastcall_cc@4:
160
+ #[ cfg( target_os = "windows" ) ]
161
+ #[ no_mangle]
162
+ #[ naked]
163
+ pub unsafe extern "fastcall" fn fastcall_cc ( x : i32 ) -> i32 {
164
+ naked_asm ! ( "ret" ) ;
165
+ }
0 commit comments