5 #ifndef V8_WASM_BASELINE_S390_LIFTOFF_ASSEMBLER_S390_H_ 6 #define V8_WASM_BASELINE_S390_LIFTOFF_ASSEMBLER_S390_H_ 8 #include "src/wasm/baseline/liftoff-assembler.h" 10 #define BAILOUT(reason) bailout("s390 " reason) 16 int LiftoffAssembler::PrepareStackFrame() {
17 BAILOUT(
"PrepareStackFrame");
21 void LiftoffAssembler::PatchPrepareStackFrame(
int offset,
23 BAILOUT(
"PatchPrepareStackFrame");
26 void LiftoffAssembler::FinishCode() {}
28 void LiftoffAssembler::AbortCompilation() {}
30 void LiftoffAssembler::LoadConstant(LiftoffRegister reg, WasmValue value,
31 RelocInfo::Mode rmode) {
32 BAILOUT(
"LoadConstant");
35 void LiftoffAssembler::LoadFromInstance(Register dst,
uint32_t offset,
37 BAILOUT(
"LoadFromInstance");
40 void LiftoffAssembler::SpillInstance(Register instance) {
41 BAILOUT(
"SpillInstance");
44 void LiftoffAssembler::FillInstanceInto(Register dst) {
45 BAILOUT(
"FillInstanceInto");
48 void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr,
49 Register offset_reg,
uint32_t offset_imm,
50 LoadType type, LiftoffRegList pinned,
51 uint32_t* protected_load_pc,
bool is_load_mem) {
55 void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
56 uint32_t offset_imm, LiftoffRegister src,
57 StoreType type, LiftoffRegList pinned,
58 uint32_t* protected_store_pc,
bool is_store_mem) {
62 void LiftoffAssembler::LoadCallerFrameSlot(LiftoffRegister dst,
65 BAILOUT(
"LoadCallerFrameSlot");
68 void LiftoffAssembler::MoveStackValue(
uint32_t dst_index,
uint32_t src_index,
70 BAILOUT(
"MoveStackValue");
73 void LiftoffAssembler::Move(Register dst, Register src, ValueType type) {
74 BAILOUT(
"Move Register");
77 void LiftoffAssembler::Move(DoubleRegister dst, DoubleRegister src,
79 BAILOUT(
"Move DoubleRegister");
82 void LiftoffAssembler::Spill(
uint32_t index, LiftoffRegister reg,
84 BAILOUT(
"Spill register");
87 void LiftoffAssembler::Spill(
uint32_t index, WasmValue value) {
88 BAILOUT(
"Spill value");
91 void LiftoffAssembler::Fill(LiftoffRegister reg,
uint32_t index,
96 void LiftoffAssembler::FillI64Half(Register,
uint32_t half_index) {
97 BAILOUT(
"FillI64Half");
100 #define UNIMPLEMENTED_GP_BINOP(name) \ 101 void LiftoffAssembler::emit_##name(Register dst, Register lhs, \ 103 BAILOUT("gp binop: " #name); \ 105 #define UNIMPLEMENTED_I64_BINOP(name) \ 106 void LiftoffAssembler::emit_##name(LiftoffRegister dst, LiftoffRegister lhs, \ 107 LiftoffRegister rhs) { \ 108 BAILOUT("i64 binop: " #name); \ 110 #define UNIMPLEMENTED_GP_UNOP(name) \ 111 bool LiftoffAssembler::emit_##name(Register dst, Register src) { \ 112 BAILOUT("gp unop: " #name); \ 115 #define UNIMPLEMENTED_FP_BINOP(name) \ 116 void LiftoffAssembler::emit_##name(DoubleRegister dst, DoubleRegister lhs, \ 117 DoubleRegister rhs) { \ 118 BAILOUT("fp binop: " #name); \ 120 #define UNIMPLEMENTED_FP_UNOP(name) \ 121 void LiftoffAssembler::emit_##name(DoubleRegister dst, DoubleRegister src) { \ 122 BAILOUT("fp unop: " #name); \ 124 #define UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(name) \ 125 bool LiftoffAssembler::emit_##name(DoubleRegister dst, DoubleRegister src) { \ 126 BAILOUT("fp unop: " #name); \ 129 #define UNIMPLEMENTED_I32_SHIFTOP(name) \ 130 void LiftoffAssembler::emit_##name(Register dst, Register src, \ 131 Register amount, LiftoffRegList pinned) { \ 132 BAILOUT("i32 shiftop: " #name); \ 134 #define UNIMPLEMENTED_I64_SHIFTOP(name) \ 135 void LiftoffAssembler::emit_##name(LiftoffRegister dst, LiftoffRegister src, \ 136 Register amount, LiftoffRegList pinned) { \ 137 BAILOUT("i64 shiftop: " #name); \ 140 UNIMPLEMENTED_GP_BINOP(i32_add)
141 UNIMPLEMENTED_GP_BINOP(i32_sub)
142 UNIMPLEMENTED_GP_BINOP(i32_mul)
143 UNIMPLEMENTED_GP_BINOP(i32_and)
144 UNIMPLEMENTED_GP_BINOP(i32_or)
145 UNIMPLEMENTED_GP_BINOP(i32_xor)
146 UNIMPLEMENTED_I32_SHIFTOP(i32_shl)
147 UNIMPLEMENTED_I32_SHIFTOP(i32_sar)
148 UNIMPLEMENTED_I32_SHIFTOP(i32_shr)
149 UNIMPLEMENTED_I64_BINOP(i64_add)
150 UNIMPLEMENTED_I64_BINOP(i64_sub)
151 UNIMPLEMENTED_I64_BINOP(i64_mul)
152 #ifdef V8_TARGET_ARCH_S390X 153 UNIMPLEMENTED_I64_BINOP(i64_and)
154 UNIMPLEMENTED_I64_BINOP(i64_or)
155 UNIMPLEMENTED_I64_BINOP(i64_xor)
157 UNIMPLEMENTED_I64_SHIFTOP(i64_shl)
158 UNIMPLEMENTED_I64_SHIFTOP(i64_sar)
159 UNIMPLEMENTED_I64_SHIFTOP(i64_shr)
160 UNIMPLEMENTED_GP_UNOP(i32_clz)
161 UNIMPLEMENTED_GP_UNOP(i32_ctz)
162 UNIMPLEMENTED_GP_UNOP(i32_popcnt)
163 UNIMPLEMENTED_FP_BINOP(f32_add)
164 UNIMPLEMENTED_FP_BINOP(f32_sub)
165 UNIMPLEMENTED_FP_BINOP(f32_mul)
166 UNIMPLEMENTED_FP_BINOP(f32_div)
167 UNIMPLEMENTED_FP_BINOP(f32_min)
168 UNIMPLEMENTED_FP_BINOP(f32_max)
169 UNIMPLEMENTED_FP_BINOP(f32_copysign)
170 UNIMPLEMENTED_FP_UNOP(f32_abs)
171 UNIMPLEMENTED_FP_UNOP(f32_neg)
172 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f32_ceil)
173 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f32_floor)
174 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f32_trunc)
175 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f32_nearest_int)
176 UNIMPLEMENTED_FP_UNOP(f32_sqrt)
177 UNIMPLEMENTED_FP_BINOP(f64_add)
178 UNIMPLEMENTED_FP_BINOP(f64_sub)
179 UNIMPLEMENTED_FP_BINOP(f64_mul)
180 UNIMPLEMENTED_FP_BINOP(f64_div)
181 UNIMPLEMENTED_FP_BINOP(f64_min)
182 UNIMPLEMENTED_FP_BINOP(f64_max)
183 UNIMPLEMENTED_FP_BINOP(f64_copysign)
184 UNIMPLEMENTED_FP_UNOP(f64_abs)
185 UNIMPLEMENTED_FP_UNOP(f64_neg)
186 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f64_ceil)
187 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f64_floor)
188 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f64_trunc)
189 UNIMPLEMENTED_FP_UNOP_RETURN_TRUE(f64_nearest_int)
190 UNIMPLEMENTED_FP_UNOP(f64_sqrt)
192 #undef UNIMPLEMENTED_GP_BINOP 193 #undef UNIMPLEMENTED_I64_BINOP 194 #undef UNIMPLEMENTED_GP_UNOP 195 #undef UNIMPLEMENTED_FP_BINOP 196 #undef UNIMPLEMENTED_FP_UNOP 197 #undef UNIMPLEMENTED_FP_UNOP_RETURN_TRUE 198 #undef UNIMPLEMENTED_I32_SHIFTOP 199 #undef UNIMPLEMENTED_I64_SHIFTOP 201 void LiftoffAssembler::emit_i32_divs(Register dst, Register lhs, Register rhs,
202 Label* trap_div_by_zero,
203 Label* trap_div_unrepresentable) {
207 void LiftoffAssembler::emit_i32_divu(Register dst, Register lhs, Register rhs,
208 Label* trap_div_by_zero) {
212 void LiftoffAssembler::emit_i32_rems(Register dst, Register lhs, Register rhs,
213 Label* trap_div_by_zero) {
217 void LiftoffAssembler::emit_i32_remu(Register dst, Register lhs, Register rhs,
218 Label* trap_div_by_zero) {
222 void LiftoffAssembler::emit_i32_shr(Register dst, Register lhs,
int amount) {
226 bool LiftoffAssembler::emit_i64_divs(LiftoffRegister dst, LiftoffRegister lhs,
228 Label* trap_div_by_zero,
229 Label* trap_div_unrepresentable) {
234 bool LiftoffAssembler::emit_i64_divu(LiftoffRegister dst, LiftoffRegister lhs,
236 Label* trap_div_by_zero) {
241 bool LiftoffAssembler::emit_i64_rems(LiftoffRegister dst, LiftoffRegister lhs,
243 Label* trap_div_by_zero) {
248 bool LiftoffAssembler::emit_i64_remu(LiftoffRegister dst, LiftoffRegister lhs,
250 Label* trap_div_by_zero) {
255 void LiftoffAssembler::emit_i64_shr(LiftoffRegister dst, LiftoffRegister lhs,
260 void LiftoffAssembler::emit_i32_to_intptr(Register dst, Register src) {
261 #ifdef V8_TARGET_ARCH_S390X 262 BAILOUT(
"emit_i32_to_intptr");
268 bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
270 LiftoffRegister src, Label* trap) {
271 BAILOUT(
"emit_type_conversion");
275 void LiftoffAssembler::emit_i32_signextend_i8(Register dst, Register src) {
276 BAILOUT(
"emit_i32_signextend_i8");
279 void LiftoffAssembler::emit_i32_signextend_i16(Register dst, Register src) {
280 BAILOUT(
"emit_i32_signextend_i16");
283 void LiftoffAssembler::emit_i64_signextend_i8(LiftoffRegister dst,
284 LiftoffRegister src) {
285 BAILOUT(
"emit_i64_signextend_i8");
288 void LiftoffAssembler::emit_i64_signextend_i16(LiftoffRegister dst,
289 LiftoffRegister src) {
290 BAILOUT(
"emit_i64_signextend_i16");
293 void LiftoffAssembler::emit_i64_signextend_i32(LiftoffRegister dst,
294 LiftoffRegister src) {
295 BAILOUT(
"emit_i64_signextend_i32");
298 void LiftoffAssembler::emit_jump(Label* label) { BAILOUT(
"emit_jump"); }
300 void LiftoffAssembler::emit_jump(Register target) { BAILOUT(
"emit_jump"); }
302 void LiftoffAssembler::emit_cond_jump(Condition cond, Label* label,
303 ValueType type, Register lhs,
305 BAILOUT(
"emit_cond_jump");
308 void LiftoffAssembler::emit_i32_eqz(Register dst, Register src) {
309 BAILOUT(
"emit_i32_eqz");
312 void LiftoffAssembler::emit_i32_set_cond(Condition cond, Register dst,
313 Register lhs, Register rhs) {
314 BAILOUT(
"emit_i32_set_cond");
317 void LiftoffAssembler::emit_i64_eqz(Register dst, LiftoffRegister src) {
318 BAILOUT(
"emit_i64_eqz");
321 void LiftoffAssembler::emit_i64_set_cond(Condition cond, Register dst,
323 LiftoffRegister rhs) {
324 BAILOUT(
"emit_i64_set_cond");
327 void LiftoffAssembler::emit_f32_set_cond(Condition cond, Register dst,
329 DoubleRegister rhs) {
330 BAILOUT(
"emit_f32_set_cond");
333 void LiftoffAssembler::emit_f64_set_cond(Condition cond, Register dst,
335 DoubleRegister rhs) {
336 BAILOUT(
"emit_f64_set_cond");
339 void LiftoffAssembler::StackCheck(Label* ool_code, Register limit_address) {
340 BAILOUT(
"StackCheck");
343 void LiftoffAssembler::CallTrapCallbackForTesting() {
344 BAILOUT(
"CallTrapCallbackForTesting");
347 void LiftoffAssembler::AssertUnreachable(AbortReason reason) {
348 BAILOUT(
"AssertUnreachable");
351 void LiftoffAssembler::PushRegisters(LiftoffRegList regs) {
352 BAILOUT(
"PushRegisters");
355 void LiftoffAssembler::PopRegisters(LiftoffRegList regs) {
356 BAILOUT(
"PopRegisters");
359 void LiftoffAssembler::DropStackSlotsAndRet(
uint32_t num_stack_slots) {
360 BAILOUT(
"DropStackSlotsAndRet");
363 void LiftoffAssembler::CallC(wasm::FunctionSig* sig,
364 const LiftoffRegister* args,
365 const LiftoffRegister* rets,
366 ValueType out_argument_type,
int stack_bytes,
367 ExternalReference ext_ref) {
371 void LiftoffAssembler::CallNativeWasmCode(Address addr) {
372 BAILOUT(
"CallNativeWasmCode");
375 void LiftoffAssembler::CallIndirect(wasm::FunctionSig* sig,
376 compiler::CallDescriptor* call_descriptor,
378 BAILOUT(
"CallIndirect");
381 void LiftoffAssembler::CallRuntimeStub(WasmCode::RuntimeStubId sid) {
382 BAILOUT(
"CallRuntimeStub");
385 void LiftoffAssembler::AllocateStackSlot(Register addr,
uint32_t size) {
386 BAILOUT(
"AllocateStackSlot");
389 void LiftoffAssembler::DeallocateStackSlot(
uint32_t size) {
390 BAILOUT(
"DeallocateStackSlot");
393 void LiftoffStackSlots::Construct() {
394 asm_->BAILOUT(
"LiftoffStackSlots::Construct");
403 #endif // V8_WASM_BASELINE_S390_LIFTOFF_ASSEMBLER_S390_H_