forked from OSchip/llvm-project
85 lines
3.0 KiB
ArmAsm
85 lines
3.0 KiB
ArmAsm
# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+sign_ext,+simd128 < %s | FileCheck %s
|
|
|
|
.text
|
|
.type test0,@function
|
|
test0:
|
|
# Test all types:
|
|
.param i32, i64
|
|
.local f32, f64, v128, v128
|
|
# Explicit getlocal/setlocal:
|
|
get_local $push0=, 2
|
|
set_local 2, $pop0=
|
|
# Implicit locals & immediates:
|
|
i32.const $0=, -1
|
|
f64.const $3=, 0x1.999999999999ap1
|
|
v128.const $4=, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
|
|
v128.const $5=, 0, 1, 2, 3, 4, 5, 6, 7
|
|
# Indirect addressing:
|
|
get_local $push1=, 0
|
|
f64.store 0($pop1), $3
|
|
# Loops, conditionals, binary ops, calls etc:
|
|
block
|
|
i32.const $push2=, 1
|
|
get_local $push7=, 0
|
|
i32.ge_s $push0=, $pop2, $pop7
|
|
br_if 0, $pop0 # 0: down to label0
|
|
.LBB0_1:
|
|
loop # label1:
|
|
call $drop=, something1@FUNCTION
|
|
i64.const $push10=, 1234
|
|
i32.call $push8=, something2@FUNCTION, $pop10
|
|
i32.const $push11=, 0
|
|
call_indirect $pop11
|
|
i32.const $push5=, 1
|
|
i32.add $push4=, $pop8, $pop5
|
|
tee_local $push3=, 0, $pop4
|
|
get_local $push9=, 0
|
|
i32.lt_s $push1=, $pop3, $pop9
|
|
br_if 0, $pop1 # 0: up to label1
|
|
.LBB0_2:
|
|
end_loop
|
|
end_block # label0:
|
|
get_local $push12=, 4
|
|
get_local $push13=, 5
|
|
f32x4.add $4=, $pop12, $pop13
|
|
end_function
|
|
|
|
|
|
# CHECK: .text
|
|
# CHECK-LABEL: test0:
|
|
# CHECK-NEXT: .param i32, i64
|
|
# CHECK-NEXT: .local f32, f64
|
|
# CHECK-NEXT: get_local $push0=, 2
|
|
# CHECK-NEXT: set_local 2, $pop0
|
|
# CHECK-NEXT: i32.const $0=, -1
|
|
# CHECK-NEXT: f64.const $3=, 0x1.999999999999ap1
|
|
# CHECK-NEXT: v128.const $4=, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
|
|
# CHECK-NEXT: v128.const $5=, 0, 1, 2, 3, 4, 5, 6, 7
|
|
# CHECK-NEXT: get_local $push1=, 0
|
|
# CHECK-NEXT: f64.store 0($pop1):p2align=0, $3
|
|
# CHECK-NEXT: block
|
|
# CHECK-NEXT: i32.const $push2=, 1
|
|
# CHECK-NEXT: get_local $push7=, 0
|
|
# CHECK-NEXT: i32.ge_s $push0=, $pop2, $pop7
|
|
# CHECK-NEXT: br_if 0, $pop0 # 0: down to label0
|
|
# CHECK-NEXT: .LBB0_1:
|
|
# CHECK-NEXT: loop # label1:
|
|
# CHECK-NEXT: call something1@FUNCTION
|
|
# CHECK-NEXT: i64.const $push10=, 1234
|
|
# CHECK-NEXT: i32.call $push8=, something2@FUNCTION
|
|
# CHECK-NEXT: i32.const $push11=, 0
|
|
# CHECK-NEXT: call_indirect
|
|
# CHECK-NEXT: i32.const $push5=, 1
|
|
# CHECK-NEXT: i32.add $push4=, $pop8, $pop5
|
|
# CHECK-NEXT: tee_local $push3=, 0, $pop4
|
|
# CHECK-NEXT: get_local $push9=, 0
|
|
# CHECK-NEXT: i32.lt_s $push1=, $pop3, $pop9
|
|
# CHECK-NEXT: br_if 0, $pop1 # 0: up to label1
|
|
# CHECK-NEXT: .LBB0_2:
|
|
# CHECK-NEXT: end_loop
|
|
# CHECK-NEXT: end_block # label0:
|
|
# CHECK-NEXT: get_local $push12=, 4
|
|
# CHECK-NEXT: get_local $push13=, 5
|
|
# CHECK-NEXT: f32x4.add $4=, $pop12, $pop13
|
|
# CHECK-NEXT: end_function
|