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:
Marcin Kolny
2023-10-07 12:55:14 +01:00
committed by GitHub
parent 3668093053
commit b115b7baac
7 changed files with 159 additions and 51 deletions

View 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
)
)