mirror of
https://github.com/fluencelabs/wasmer
synced 2025-04-25 02:12:13 +00:00
More mov variants.
This commit is contained in:
parent
89d8b5a41c
commit
b304317682
@ -507,11 +507,55 @@ impl Emitter for Assembler {
|
|||||||
}
|
}
|
||||||
dynasm!(self ; b >after; data: ; .dword x as i32; after: ; ldr w_tmp1, <data; strh w_tmp1, [x_tmp3] );
|
dynasm!(self ; b >after; data: ; .dword x as i32; after: ; ldr w_tmp1, <data; strh w_tmp1, [x_tmp3] );
|
||||||
}
|
}
|
||||||
(_, Location::XMM(_), _) => {
|
(Size::S32, Location::XMM(src), Location::XMM(dst)) => {
|
||||||
dynasm!(self ; brk 21);
|
dynasm!(self ; fmov S(map_xmm(dst).v()), S(map_xmm(src).v()));
|
||||||
}
|
}
|
||||||
(_, _, Location::XMM(_)) => {
|
(Size::S32, Location::XMM(src), Location::GPR(dst)) => {
|
||||||
dynasm!(self ; brk 22);
|
dynasm!(self ; fmov W(map_gpr(dst).x()), S(map_xmm(src).v()));
|
||||||
|
}
|
||||||
|
(Size::S32, Location::GPR(src), Location::XMM(dst)) => {
|
||||||
|
dynasm!(self ; fmov S(map_xmm(dst).v()), W(map_gpr(src).x()));
|
||||||
|
}
|
||||||
|
(Size::S32, Location::Memory(base, disp), Location::XMM(dst)) => {
|
||||||
|
if disp >= 0 {
|
||||||
|
dynasm!(self ; add x_tmp3, X(map_gpr(base).x()), disp as u32);
|
||||||
|
} else {
|
||||||
|
dynasm!(self ; sub x_tmp3, X(map_gpr(base).x()), (-disp) as u32);
|
||||||
|
}
|
||||||
|
dynasm!(self ; ldr S(map_xmm(dst).v()), [x_tmp3] );
|
||||||
|
}
|
||||||
|
(Size::S32, Location::XMM(src), Location::Memory(base, disp)) => {
|
||||||
|
if disp >= 0 {
|
||||||
|
dynasm!(self ; add x_tmp3, X(map_gpr(base).x()), disp as u32);
|
||||||
|
} else {
|
||||||
|
dynasm!(self ; sub x_tmp3, X(map_gpr(base).x()), (-disp) as u32);
|
||||||
|
}
|
||||||
|
dynasm!(self ; str S(map_xmm(src).v()), [x_tmp3] );
|
||||||
|
}
|
||||||
|
(Size::S64, Location::XMM(src), Location::XMM(dst)) => {
|
||||||
|
dynasm!(self ; fmov D(map_xmm(dst).v()), D(map_xmm(src).v()));
|
||||||
|
}
|
||||||
|
(Size::S64, Location::XMM(src), Location::GPR(dst)) => {
|
||||||
|
dynasm!(self ; fmov X(map_gpr(dst).x()), D(map_xmm(src).v()));
|
||||||
|
}
|
||||||
|
(Size::S64, Location::GPR(src), Location::XMM(dst)) => {
|
||||||
|
dynasm!(self ; fmov D(map_xmm(dst).v()), X(map_gpr(src).x()));
|
||||||
|
}
|
||||||
|
(Size::S64, Location::Memory(base, disp), Location::XMM(dst)) => {
|
||||||
|
if disp >= 0 {
|
||||||
|
dynasm!(self ; add x_tmp3, X(map_gpr(base).x()), disp as u32);
|
||||||
|
} else {
|
||||||
|
dynasm!(self ; sub x_tmp3, X(map_gpr(base).x()), (-disp) as u32);
|
||||||
|
}
|
||||||
|
dynasm!(self ; ldr D(map_xmm(dst).v()), [x_tmp3] );
|
||||||
|
}
|
||||||
|
(Size::S64, Location::XMM(src), Location::Memory(base, disp)) => {
|
||||||
|
if disp >= 0 {
|
||||||
|
dynasm!(self ; add x_tmp3, X(map_gpr(base).x()), disp as u32);
|
||||||
|
} else {
|
||||||
|
dynasm!(self ; sub x_tmp3, X(map_gpr(base).x()), (-disp) as u32);
|
||||||
|
}
|
||||||
|
dynasm!(self ; str D(map_xmm(src).v()), [x_tmp3] );
|
||||||
}
|
}
|
||||||
_ => panic!("NOT IMPL: {:?} {:?} {:?}", sz, src, dst)
|
_ => panic!("NOT IMPL: {:?} {:?} {:?}", sz, src, dst)
|
||||||
}
|
}
|
||||||
@ -1381,7 +1425,6 @@ impl Emitter for Assembler {
|
|||||||
let target = map_gpr(target);
|
let target = map_gpr(target);
|
||||||
dynasm!(
|
dynasm!(
|
||||||
self
|
self
|
||||||
; bkpt 16
|
|
||||||
; sub sp, sp, 80
|
; sub sp, sp, 80
|
||||||
; str x30, [sp, 0] // LR
|
; str x30, [sp, 0] // LR
|
||||||
; str X(target.x()), [sp, 8]
|
; str X(target.x()), [sp, 8]
|
||||||
@ -1428,7 +1471,6 @@ impl Emitter for Assembler {
|
|||||||
|
|
||||||
; ldr x_tmp1, [x_rsp]
|
; ldr x_tmp1, [x_rsp]
|
||||||
; add x_rsp, x_rsp, 8
|
; add x_rsp, x_rsp, 8
|
||||||
; bkpt 17
|
|
||||||
; br x_tmp1
|
; br x_tmp1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user