v2 / vlib / v / slow_tests / assembly / asm_test.rv64.v
66 lines · 61 sloc · 818 bytes · 989ebe1b30e5a6220c60832db8faf1d79d7b9885
Raw
1fn test_inline_asm_rv64() {
2 a, mut b := i64(123), i64(0)
3 asm rv64 {
4 // op dst, src
5 mv t0, a
6 mv b, t0
7 ; +r (b)
8 ; r (a)
9 ; t0
10 }
11 assert a == b
12
13 mut c := 0
14 asm rv64 {
15 li c, 5
16 ; +r (c)
17 }
18 assert c == 5
19
20 d, e, mut f := 10, 2, 0
21 asm rv64 {
22 mv f, d
23 add f, f, e
24 addi f, f, 5
25 ; +r (f)
26 ; r (d)
27 r (e)
28 }
29 assert d == 10
30 assert e == 2
31 assert f == 17
32
33 g, h, mut i := 2.3, 4.8, -3.5
34 asm rv64 {
35 fadd.d i, g, h
36 ; =f (i)
37 ; f (g)
38 f (h)
39 }
40 assert g == 2.3
41 assert h == 4.8
42 assert i == 7.1
43
44 n1, n2, mut sum, mut prod := 3, 5, -1, -1
45 asm rv64 {
46 add '%0', '%2', '%3'
47 mul '%1', '%2', '%3'
48 ; =&r (sum)
49 =r (prod)
50 ; r (n1)
51 r (n2)
52 }
53 assert sum == 8
54 assert prod == 15
55
56 l := 5
57 m := &l
58 asm rv64 {
59 li t0, 7
60 sd t0, [m]
61 ; ; r (m)
62 ; memory
63 t0
64 }
65 assert l == 7
66}
67