xref: /llvm-project/llvm/test/CodeGen/RISCV/inline-asm-d-modifier-N.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1228f88fdSSam Elliott; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2228f88fdSSam Elliott; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32 -verify-machineinstrs -no-integrated-as < %s \
3228f88fdSSam Elliott; RUN:   | FileCheck -check-prefix=RV32F %s
4228f88fdSSam Elliott; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64 -verify-machineinstrs -no-integrated-as < %s \
5228f88fdSSam Elliott; RUN:   | FileCheck -check-prefix=RV64F %s
6228f88fdSSam Elliott
7228f88fdSSam Elliott;; `.insn 0x4, 0x02000053 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)` is
8228f88fdSSam Elliott;; the raw encoding for `fadd.d`
9228f88fdSSam Elliott
10228f88fdSSam Elliott@gd = external global double
11228f88fdSSam Elliott
12228f88fdSSam Elliottdefine double @constraint_f_double(double %a) nounwind {
13228f88fdSSam Elliott; RV32F-LABEL: constraint_f_double:
14228f88fdSSam Elliott; RV32F:       # %bb.0:
15228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, -16
16228f88fdSSam Elliott; RV32F-NEXT:    sw a0, 8(sp)
17228f88fdSSam Elliott; RV32F-NEXT:    sw a1, 12(sp)
18228f88fdSSam Elliott; RV32F-NEXT:    lui a0, %hi(gd)
19*9122c523SPengcheng Wang; RV32F-NEXT:    fld fa5, 8(sp)
20228f88fdSSam Elliott; RV32F-NEXT:    fld fa4, %lo(gd)(a0)
21228f88fdSSam Elliott; RV32F-NEXT:    #APP
22228f88fdSSam Elliott; RV32F-NEXT:    .insn 0x4, 0x02000053 | (15 << 7) | (15 << 15) | (14 << 20)
23228f88fdSSam Elliott; RV32F-NEXT:    #NO_APP
24228f88fdSSam Elliott; RV32F-NEXT:    fsd fa5, 8(sp)
25228f88fdSSam Elliott; RV32F-NEXT:    lw a0, 8(sp)
26228f88fdSSam Elliott; RV32F-NEXT:    lw a1, 12(sp)
27228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, 16
28228f88fdSSam Elliott; RV32F-NEXT:    ret
29228f88fdSSam Elliott;
30228f88fdSSam Elliott; RV64F-LABEL: constraint_f_double:
31228f88fdSSam Elliott; RV64F:       # %bb.0:
32228f88fdSSam Elliott; RV64F-NEXT:    lui a1, %hi(gd)
33228f88fdSSam Elliott; RV64F-NEXT:    fld fa5, %lo(gd)(a1)
34228f88fdSSam Elliott; RV64F-NEXT:    fmv.d.x fa4, a0
35228f88fdSSam Elliott; RV64F-NEXT:    #APP
36228f88fdSSam Elliott; RV64F-NEXT:    .insn 0x4, 0x02000053 | (15 << 7) | (14 << 15) | (15 << 20)
37228f88fdSSam Elliott; RV64F-NEXT:    #NO_APP
38228f88fdSSam Elliott; RV64F-NEXT:    fmv.x.d a0, fa5
39228f88fdSSam Elliott; RV64F-NEXT:    ret
40228f88fdSSam Elliott  %1 = load double, ptr @gd
41228f88fdSSam Elliott  %2 = tail call double asm ".insn 0x4, 0x02000053 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "=f,f,f"(double %a, double %1)
42228f88fdSSam Elliott  ret double %2
43228f88fdSSam Elliott}
44228f88fdSSam Elliott
45228f88fdSSam Elliottdefine double @constraint_cf_double(double %a) nounwind {
46228f88fdSSam Elliott; RV32F-LABEL: constraint_cf_double:
47228f88fdSSam Elliott; RV32F:       # %bb.0:
48228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, -16
49228f88fdSSam Elliott; RV32F-NEXT:    sw a0, 8(sp)
50228f88fdSSam Elliott; RV32F-NEXT:    sw a1, 12(sp)
51228f88fdSSam Elliott; RV32F-NEXT:    lui a0, %hi(gd)
52*9122c523SPengcheng Wang; RV32F-NEXT:    fld fa5, 8(sp)
53228f88fdSSam Elliott; RV32F-NEXT:    fld fa4, %lo(gd)(a0)
54228f88fdSSam Elliott; RV32F-NEXT:    #APP
55228f88fdSSam Elliott; RV32F-NEXT:    .insn 0x4, 0x02000053 | (15 << 7) | (15 << 15) | (14 << 20)
56228f88fdSSam Elliott; RV32F-NEXT:    #NO_APP
57228f88fdSSam Elliott; RV32F-NEXT:    fsd fa5, 8(sp)
58228f88fdSSam Elliott; RV32F-NEXT:    lw a0, 8(sp)
59228f88fdSSam Elliott; RV32F-NEXT:    lw a1, 12(sp)
60228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, 16
61228f88fdSSam Elliott; RV32F-NEXT:    ret
62228f88fdSSam Elliott;
63228f88fdSSam Elliott; RV64F-LABEL: constraint_cf_double:
64228f88fdSSam Elliott; RV64F:       # %bb.0:
65228f88fdSSam Elliott; RV64F-NEXT:    lui a1, %hi(gd)
66228f88fdSSam Elliott; RV64F-NEXT:    fld fa5, %lo(gd)(a1)
67228f88fdSSam Elliott; RV64F-NEXT:    fmv.d.x fa4, a0
68228f88fdSSam Elliott; RV64F-NEXT:    #APP
69228f88fdSSam Elliott; RV64F-NEXT:    .insn 0x4, 0x02000053 | (15 << 7) | (14 << 15) | (15 << 20)
70228f88fdSSam Elliott; RV64F-NEXT:    #NO_APP
71228f88fdSSam Elliott; RV64F-NEXT:    fmv.x.d a0, fa5
72228f88fdSSam Elliott; RV64F-NEXT:    ret
73228f88fdSSam Elliott  %1 = load double, ptr @gd
74228f88fdSSam Elliott  %2 = tail call double asm ".insn 0x4, 0x02000053 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "=^cf,^cf,^cf"(double %a, double %1)
75228f88fdSSam Elliott  ret double %2
76228f88fdSSam Elliott}
77228f88fdSSam Elliott
78228f88fdSSam Elliottdefine double @constraint_f_double_abi_name(double %a) nounwind {
79228f88fdSSam Elliott; RV32F-LABEL: constraint_f_double_abi_name:
80228f88fdSSam Elliott; RV32F:       # %bb.0:
81228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, -16
82228f88fdSSam Elliott; RV32F-NEXT:    sw a0, 8(sp)
83228f88fdSSam Elliott; RV32F-NEXT:    sw a1, 12(sp)
84228f88fdSSam Elliott; RV32F-NEXT:    lui a0, %hi(gd)
85*9122c523SPengcheng Wang; RV32F-NEXT:    fld fa1, 8(sp)
86228f88fdSSam Elliott; RV32F-NEXT:    fld fs0, %lo(gd)(a0)
87228f88fdSSam Elliott; RV32F-NEXT:    #APP
88228f88fdSSam Elliott; RV32F-NEXT:    .insn 0x4, 0x02000053 | (0 << 7) | (11 << 15) | (8 << 20)
89228f88fdSSam Elliott; RV32F-NEXT:    #NO_APP
90228f88fdSSam Elliott; RV32F-NEXT:    fsd ft0, 8(sp)
91228f88fdSSam Elliott; RV32F-NEXT:    lw a0, 8(sp)
92228f88fdSSam Elliott; RV32F-NEXT:    lw a1, 12(sp)
93228f88fdSSam Elliott; RV32F-NEXT:    addi sp, sp, 16
94228f88fdSSam Elliott; RV32F-NEXT:    ret
95228f88fdSSam Elliott;
96228f88fdSSam Elliott; RV64F-LABEL: constraint_f_double_abi_name:
97228f88fdSSam Elliott; RV64F:       # %bb.0:
98228f88fdSSam Elliott; RV64F-NEXT:    lui a1, %hi(gd)
99228f88fdSSam Elliott; RV64F-NEXT:    fld fs0, %lo(gd)(a1)
100228f88fdSSam Elliott; RV64F-NEXT:    fmv.d.x fa1, a0
101228f88fdSSam Elliott; RV64F-NEXT:    #APP
102228f88fdSSam Elliott; RV64F-NEXT:    .insn 0x4, 0x02000053 | (0 << 7) | (11 << 15) | (8 << 20)
103228f88fdSSam Elliott; RV64F-NEXT:    #NO_APP
104228f88fdSSam Elliott; RV64F-NEXT:    fmv.x.d a0, ft0
105228f88fdSSam Elliott; RV64F-NEXT:    ret
106228f88fdSSam Elliott  %1 = load double, ptr @gd
107228f88fdSSam Elliott  %2 = tail call double asm ".insn 0x4, 0x02000053 | (${0:N} << 7) | (${1:N} << 15) | (${2:N} << 20)", "={ft0},{fa1},{fs0}"(double %a, double %1)
108228f88fdSSam Elliott  ret double %2
109228f88fdSSam Elliott}
110