11// vtest build: !msvc
2- import v.tests.assembly.util
32
43fn test_inline_asm () {
54 a, mut b := 10 , 0
@@ -33,17 +32,6 @@ fn test_inline_asm() {
3332 assert e == 2
3433 assert f == 17
3534
36- // g, h, i := 2.3, 4.8, -3.5
37- // asm rv64 {
38- // fadd.s $i, $g, $h // test `.` in instruction name
39- // : =r (i) as i
40- // : r (g) as g
41- // r (g) as h
42- // }
43- // assert g == 2.3
44- // assert h == 4.8
45- // assert i == 7.1
46-
4735 mut j := 0
4836 // do 5*3
4937 // adding three, five times
@@ -79,7 +67,7 @@ fn test_inline_asm() {
7967 l := 5
8068 m := & l
8169 asm i386 {
82- movd [m], 7 // have to specify size with q
70+ movb [m], 7
8371 ; ; r (m)
8472 }
8573 assert l == 7
@@ -88,23 +76,24 @@ fn test_inline_asm() {
8876 n := [5 , 9 , 0 , 4 ]
8977 asm i386 {
9078 loop_start2 :
91- addd [in_data + ecx * 4 + 0 ], 2
79+ addw [in_data + ecx * 4 + 0 ], 2
9280 loop loop_start2
93- addd [in_data + ecx * 4 + 0 ], 2
81+ addw [in_data + ecx * 4 + 0 ], 2
9482 ; ; c (n.len - 1 ) // c is counter (loop) register
9583 r (n.data) as in_data
9684 }
9785 assert n == [7 , 11 , 2 , 6 ]
9886
9987 mut manu := Manu{}
100- asm amd 64 {
88+ asm i 386 {
10189 mov eax, 0
10290 cpuid
103- ; = b (manu.ebx) as ebx0
104- = d (manu.edx) as edx0
105- = c (manu.ecx) as ecx0
91+ ; = b (manu.ebx)
92+ = d (manu.edx)
93+ = c (manu.ecx)
94+ ; ; eax
10695 }
107- manu.str ()
96+ assert manu.str ()[ 0 ]. is_capital ()
10897}
10998
11099@[packed]
@@ -116,11 +105,11 @@ mut:
116105 zero u8 // for string
117106}
118107
119- fn (m Manu) str () string {
108+ fn (mut m Manu) str () string {
120109 return unsafe {
121110 string {
122- str: & u8 (& m)
123- len: 24
111+ str: & u8 (m)
112+ len: 12
124113 is_lit: 1
125114 }
126115 }
@@ -129,14 +118,14 @@ fn (m Manu) str() string {
129118fn test_flag_output () {
130119 a , b := 4 , 9
131120 mut out := false
132- asm amd 64 {
121+ asm i 386 {
133122 cmp a, b
134123 ; = @ccl (out)
135124 ; r (a)
136125 r (b)
137126 }
138127 assert out
139- asm amd 64 {
128+ asm i 386 {
140129 cmp b, a
141130 ; = @ccl (out)
142131 ; r (a)
@@ -145,7 +134,7 @@ fn test_flag_output() {
145134 assert ! out
146135
147136 zero := 0
148- asm amd 64 {
137+ asm i 386 {
149138 cmp zero, zero
150139 ; = @ccz (out)
151140 ; r (zero)
@@ -154,7 +143,7 @@ fn test_flag_output() {
154143
155144 mut maybe_four := 4
156145 mut four := 4
157- asm amd 64 {
146+ asm i 386 {
158147 subl four, maybe_four
159148 testl four, maybe_four
160149 movl maybe_four, 9
@@ -168,17 +157,17 @@ fn test_flag_output() {
168157
169158fn test_asm_generic () {
170159 u := u64 (49 )
171- b := unsafe { bool (123 ) }
160+ b := unsafe { bool (0 ) }
172161 assert generic_asm (u) == 14
173162 assert u == 63
174- assert u64 ( generic_asm (b)) == 14
175- assert u64 (b) == 137
163+ assert generic_asm (b) == true
164+ assert b == true
176165}
177166
178167fn generic_asm [T](var & T) T {
179- mut ret := T (14 )
168+ mut ret := unsafe { T (14 ) }
180169 unsafe {
181- asm volatile amd 64 {
170+ asm volatile i 386 {
182171 add var, ret
183172 ; + m (var[0 ]) as var
184173 + r (ret)
0 commit comments