mirror of https://gitee.com/openkylin/qemu.git
tcg/aarch64: Fix tcg_out_rotl
The last argument of tcg_out_extr() must be in the range 0-31 if ext==0. Before the fix, when m==0 it becomes 32 and it crashes with an Illegal instruction on Apple Silicon. After the fix, it will be 0. If m is in the range 1-31, it is the same as before. Signed-off-by: Yasuo Kuwahara <kwhr00@gmail.com> Message-Id: <CAHfJ0vSXnmnTLmT0kR=a8ACRdw_UsLYOhStzUzgVEHoH8U-7sA@mail.gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
57dcb643d7
commit
26b1248f66
|
@ -1291,9 +1291,8 @@ static inline void tcg_out_rotr(TCGContext *s, TCGType ext,
|
|||
static inline void tcg_out_rotl(TCGContext *s, TCGType ext,
|
||||
TCGReg rd, TCGReg rn, unsigned int m)
|
||||
{
|
||||
int bits = ext ? 64 : 32;
|
||||
int max = bits - 1;
|
||||
tcg_out_extr(s, ext, rd, rn, rn, bits - (m & max));
|
||||
int max = ext ? 63 : 31;
|
||||
tcg_out_extr(s, ext, rd, rn, rn, -m & max);
|
||||
}
|
||||
|
||||
static inline void tcg_out_dep(TCGContext *s, TCGType ext, TCGReg rd,
|
||||
|
|
Loading…
Reference in New Issue