xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-patchpoint-webkit_jscc.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-darwin -enable-misched=0 -mcpu=cyclone < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-darwin -enable-misched=0 -mcpu=cyclone -fast-isel < %s | FileCheck %s --check-prefix=FAST
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-darwin -enable-misched=0 -mcpu=cyclone -filetype=obj -o %t %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llvm-objdump -triple arm64-apple-darwin -d %t | FileCheck %s --check-prefix CHECK-ENCODING
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK-ENCODING-NOT: <unknown>
7*9880d681SAndroid Build Coastguard Worker; CHECK-ENCODING: mov x16, #281470681743360
8*9880d681SAndroid Build Coastguard Worker; CHECK-ENCODING: movk x16, #57005, lsl #16
9*9880d681SAndroid Build Coastguard Worker; CHECK-ENCODING: movk x16, #48879
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; One argument will be passed in register, the other will be pushed on the stack.
12*9880d681SAndroid Build Coastguard Worker; Return value in x0.
13*9880d681SAndroid Build Coastguard Workerdefine void @jscall_patchpoint_codegen(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
14*9880d681SAndroid Build Coastguard Workerentry:
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: jscall_patchpoint_codegen:
16*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
17*9880d681SAndroid Build Coastguard Worker; CHECK:       str x{{.+}}, [sp]
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  mov  x0, x{{.+}}
19*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  mov  x16, #281470681743360
21*9880d681SAndroid Build Coastguard Worker; CHECK:  movk  x16, #57005, lsl #16
22*9880d681SAndroid Build Coastguard Worker; CHECK:  movk  x16, #48879
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  blr x16
24*9880d681SAndroid Build Coastguard Worker; FAST-LABEL:  jscall_patchpoint_codegen:
25*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
26*9880d681SAndroid Build Coastguard Worker; FAST:        str x{{.+}}, [sp]
27*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
28*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   mov   x16, #281470681743360
29*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #57005, lsl #16
30*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #48879
31*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   blr x16
32*9880d681SAndroid Build Coastguard Worker  %resolveCall2 = inttoptr i64 281474417671919 to i8*
33*9880d681SAndroid Build Coastguard Worker  %result = tail call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveCall2, i32 2, i64 %p4, i64 %p2)
34*9880d681SAndroid Build Coastguard Worker  %resolveCall3 = inttoptr i64 244837814038255 to i8*
35*9880d681SAndroid Build Coastguard Worker  tail call webkit_jscc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveCall3, i32 2, i64 %p4, i64 %result)
36*9880d681SAndroid Build Coastguard Worker  ret void
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; Test if the arguments are properly aligned and that we don't store undef arguments.
40*9880d681SAndroid Build Coastguard Workerdefine i64 @jscall_patchpoint_codegen2(i64 %callee) {
41*9880d681SAndroid Build Coastguard Workerentry:
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: jscall_patchpoint_codegen2:
43*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
44*9880d681SAndroid Build Coastguard Worker; CHECK:       orr w[[REG:[0-9]+]], wzr, #0x6
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str x[[REG]], [sp, #24]
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x4
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str w[[REG]], [sp, #16]
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x2
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str x[[REG]], [sp]
50*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  mov  x16, #281470681743360
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  movk  x16, #57005, lsl #16
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  movk  x16, #48879
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  blr x16
55*9880d681SAndroid Build Coastguard Worker; FAST-LABEL:  jscall_patchpoint_codegen2:
56*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
57*9880d681SAndroid Build Coastguard Worker; FAST:        orr [[REG1:x[0-9]+]], xzr, #0x2
58*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   orr [[REG2:w[0-9]+]], wzr, #0x4
59*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   orr [[REG3:x[0-9]+]], xzr, #0x6
60*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG1]], [sp]
61*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG2]], [sp, #16]
62*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG3]], [sp, #24]
63*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
64*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   mov  x16, #281470681743360
65*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #57005, lsl #16
66*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #48879
67*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   blr x16
68*9880d681SAndroid Build Coastguard Worker  %call = inttoptr i64 281474417671919 to i8*
69*9880d681SAndroid Build Coastguard Worker  %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 6, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6)
70*9880d681SAndroid Build Coastguard Worker  ret i64 %result
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; Test if the arguments are properly aligned and that we don't store undef arguments.
74*9880d681SAndroid Build Coastguard Workerdefine i64 @jscall_patchpoint_codegen3(i64 %callee) {
75*9880d681SAndroid Build Coastguard Workerentry:
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: jscall_patchpoint_codegen3:
77*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
78*9880d681SAndroid Build Coastguard Worker; CHECK:       mov  w[[REG:[0-9]+]], #10
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str x[[REG]], [sp, #48]
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x8
81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str w[[REG]], [sp, #36]
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x6
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str x[[REG]], [sp, #24]
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x4
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str w[[REG]], [sp, #16]
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  orr w[[REG:[0-9]+]], wzr, #0x2
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  str x[[REG]], [sp]
88*9880d681SAndroid Build Coastguard Worker; CHECK:       Ltmp
89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  mov   x16, #281470681743360
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  movk  x16, #57005, lsl #16
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  movk  x16, #48879
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  blr x16
93*9880d681SAndroid Build Coastguard Worker; FAST-LABEL:  jscall_patchpoint_codegen3:
94*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
95*9880d681SAndroid Build Coastguard Worker; FAST:        orr [[REG1:x[0-9]+]], xzr, #0x2
96*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   orr [[REG2:w[0-9]+]], wzr, #0x4
97*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   orr [[REG3:x[0-9]+]], xzr, #0x6
98*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   orr [[REG4:w[0-9]+]], wzr, #0x8
99*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   mov [[REG5:x[0-9]+]], #10
100*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG1]], [sp]
101*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG2]], [sp, #16]
102*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG3]], [sp, #24]
103*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG4]], [sp, #36]
104*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   str [[REG5]], [sp, #48]
105*9880d681SAndroid Build Coastguard Worker; FAST:        Ltmp
106*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   mov   x16, #281470681743360
107*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #57005, lsl #16
108*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   movk  x16, #48879
109*9880d681SAndroid Build Coastguard Worker; FAST-NEXT:   blr x16
110*9880d681SAndroid Build Coastguard Worker  %call = inttoptr i64 281474417671919 to i8*
111*9880d681SAndroid Build Coastguard Worker  %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 10, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6, i32 undef, i32 8, i32 undef, i64 10)
112*9880d681SAndroid Build Coastguard Worker  ret i64 %result
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_i16:
116*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh [[BREG:w[0-9]+]], [sp]
117*9880d681SAndroid Build Coastguard Worker; CHECK: add {{w[0-9]+}}, w0, [[BREG]]
118*9880d681SAndroid Build Coastguard Workerdefine webkit_jscc zeroext i16 @test_i16(i16 zeroext %a, i16 zeroext %b) {
119*9880d681SAndroid Build Coastguard Worker  %sum = add i16 %a, %b
120*9880d681SAndroid Build Coastguard Worker  ret i16 %sum
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
124*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)
125