Fix compilation of shift opcodes on x86_64 and i386 architectures (#2619)
This change fixes the case where the right parameter of shift operator is negative, specifically, when both parameters of shift opcode are constants.
This commit is contained in:
2
tests/wamr-compiler/.gitignore
vendored
Normal file
2
tests/wamr-compiler/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.aot
|
||||
*.wasm
|
||||
3
tests/wamr-compiler/README.md
Normal file
3
tests/wamr-compiler/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# WAMR test benchmarks
|
||||
|
||||
This folder contains tests for WAMR AOT compiler and its generated code.
|
||||
43
tests/wamr-compiler/test_shift_negative_constants.wat
Normal file
43
tests/wamr-compiler/test_shift_negative_constants.wat
Normal file
@ -0,0 +1,43 @@
|
||||
;; Copyright (C) 2023 Amazon Inc. All rights reserved.
|
||||
;; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
;;
|
||||
;; Those tests verify if passing constant negative value
|
||||
;; as a right parameter of the shift operator (along
|
||||
;; with a constant value of the left operator) causes
|
||||
;; any problems. See: https://github.com/bytecodealliance/wasm-micro-runtime/pull/2619
|
||||
(module
|
||||
(memory (export "memory") 1 1)
|
||||
(func $assert_eq (param i32 i32)
|
||||
(i32.ne (local.get 0) (local.get 1))
|
||||
if
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
|
||||
(func $i32_shr_u
|
||||
(call $assert_eq
|
||||
(i32.shr_u (i32.const -1) (i32.const -5))
|
||||
(i32.const 31)
|
||||
)
|
||||
)
|
||||
|
||||
(func $i32_shr_s
|
||||
(call $assert_eq
|
||||
(i32.shr_u (i32.const 32) (i32.const -30))
|
||||
(i32.const 8)
|
||||
)
|
||||
)
|
||||
|
||||
(func $i32_shl
|
||||
(call $assert_eq
|
||||
(i32.shl (i32.const -1) (i32.const -30))
|
||||
(i32.const -4)
|
||||
)
|
||||
)
|
||||
|
||||
(func (export "_start")
|
||||
call $i32_shr_u
|
||||
call $i32_shr_s
|
||||
call $i32_shl
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user