cl/instr:asmFull test case with multiple input & output
This commit is contained in:
@@ -6,9 +6,22 @@ import _ "unsafe"
|
|||||||
func asmFull(instruction string, regs map[string]any) uintptr
|
func asmFull(instruction string, regs map[string]any) uintptr
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// no input,no return value
|
||||||
|
asmFull("nop", nil)
|
||||||
|
// input only,no return value
|
||||||
asmFull("# test value {value}", map[string]any{"value": 42})
|
asmFull("# test value {value}", map[string]any{"value": 42})
|
||||||
result := asmFull("mov {}, {value}", map[string]any{
|
// input with return value
|
||||||
|
res1 := asmFull("mov {}, {value}", map[string]any{
|
||||||
"value": 42,
|
"value": 42,
|
||||||
})
|
})
|
||||||
println("Result:", result)
|
println("Result:", res1)
|
||||||
|
// note(zzy): multiple inputs with return value
|
||||||
|
// only for test register & constraint,not have actual meaning
|
||||||
|
// the ir compare cannot crossplatform currently
|
||||||
|
// so just use a comment to test it
|
||||||
|
res2 := asmFull("# calc {x} + {y} -> {}", map[string]any{
|
||||||
|
"x": 25,
|
||||||
|
"y": 17,
|
||||||
|
})
|
||||||
|
println("Result:", res2)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ source_filename = "github.com/goplus/llgo/cl/_testrt/asmfull"
|
|||||||
@_llgo_int = linkonce global ptr null, align 8
|
@_llgo_int = linkonce global ptr null, align 8
|
||||||
@5 = private unnamed_addr constant [5 x i8] c"value", align 1
|
@5 = private unnamed_addr constant [5 x i8] c"value", align 1
|
||||||
@6 = private unnamed_addr constant [7 x i8] c"Result:", align 1
|
@6 = private unnamed_addr constant [7 x i8] c"Result:", align 1
|
||||||
|
@7 = private unnamed_addr constant [1 x i8] c"x", align 1
|
||||||
|
@8 = private unnamed_addr constant [1 x i8] c"y", align 1
|
||||||
|
|
||||||
define void @"github.com/goplus/llgo/cl/_testrt/asmfull.init"() {
|
define void @"github.com/goplus/llgo/cl/_testrt/asmfull.init"() {
|
||||||
_llgo_0:
|
_llgo_0:
|
||||||
@@ -35,6 +37,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
|
|||||||
|
|
||||||
define void @"github.com/goplus/llgo/cl/_testrt/asmfull.main"() {
|
define void @"github.com/goplus/llgo/cl/_testrt/asmfull.main"() {
|
||||||
_llgo_0:
|
_llgo_0:
|
||||||
|
call void asm sideeffect "nop", ""()
|
||||||
%0 = load ptr, ptr @_llgo_string, align 8
|
%0 = load ptr, ptr @_llgo_string, align 8
|
||||||
%1 = load ptr, ptr @_llgo_any, align 8
|
%1 = load ptr, ptr @_llgo_any, align 8
|
||||||
%2 = load ptr, ptr @"map[_llgo_string]_llgo_any", align 8
|
%2 = load ptr, ptr @"map[_llgo_string]_llgo_any", align 8
|
||||||
@@ -63,6 +66,29 @@ _llgo_0:
|
|||||||
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
|
||||||
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %18)
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %18)
|
||||||
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
|
||||||
|
%19 = load ptr, ptr @"map[_llgo_string]_llgo_any", align 8
|
||||||
|
%20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MakeMap"(ptr %19, i64 2)
|
||||||
|
%21 = load ptr, ptr @_llgo_int, align 8
|
||||||
|
%22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %21, 0
|
||||||
|
%23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %22, ptr inttoptr (i64 25 to ptr), 1
|
||||||
|
%24 = load ptr, ptr @"map[_llgo_string]_llgo_any", align 8
|
||||||
|
%25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
|
||||||
|
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 1 }, ptr %25, align 8
|
||||||
|
%26 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %24, ptr %20, ptr %25)
|
||||||
|
store %"github.com/goplus/llgo/runtime/internal/runtime.eface" %23, ptr %26, align 8
|
||||||
|
%27 = load ptr, ptr @_llgo_int, align 8
|
||||||
|
%28 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %27, 0
|
||||||
|
%29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %28, ptr inttoptr (i64 17 to ptr), 1
|
||||||
|
%30 = load ptr, ptr @"map[_llgo_string]_llgo_any", align 8
|
||||||
|
%31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
|
||||||
|
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 1 }, ptr %31, align 8
|
||||||
|
%32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %30, ptr %20, ptr %31)
|
||||||
|
store %"github.com/goplus/llgo/runtime/internal/runtime.eface" %29, ptr %32, align 8
|
||||||
|
%33 = call i64 asm sideeffect "# calc ${1} + ${2} -> $0", "=&r,r,r"(i64 25, i64 17)
|
||||||
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 7 })
|
||||||
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
|
||||||
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %33)
|
||||||
|
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user