pub trait EmitterARM64 {
Show 106 methods
// Required methods
fn get_label(&mut self) -> DynamicLabel;
fn get_offset(&self) -> AssemblyOffset;
fn get_jmp_instr_size(&self) -> u8;
fn finalize_function(&mut self);
fn emit_str(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldr(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_stur(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: GPR,
offset: i32,
) -> Result<(), CompileError>;
fn emit_ldur(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: GPR,
offset: i32,
) -> Result<(), CompileError>;
fn emit_strdb(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: GPR,
offset: u32,
) -> Result<(), CompileError>;
fn emit_stria(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: GPR,
offset: u32,
) -> Result<(), CompileError>;
fn emit_ldria(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
addr: GPR,
offset: u32,
) -> Result<(), CompileError>;
fn emit_stpdb(
&mut self,
sz: Size,
reg1: Location<GPR, NEON>,
reg2: Location<GPR, NEON>,
addr: GPR,
offset: u32,
) -> Result<(), CompileError>;
fn emit_ldpia(
&mut self,
sz: Size,
reg1: Location<GPR, NEON>,
reg2: Location<GPR, NEON>,
addr: GPR,
offset: u32,
) -> Result<(), CompileError>;
fn emit_ldrb(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldrh(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldrsb(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldrsh(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldrsw(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_strb(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_strh(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldaxr(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldaxrb(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ldaxrh(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_stlxr(
&mut self,
sz: Size,
status: Location<GPR, NEON>,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_stlxrb(
&mut self,
sz: Size,
status: Location<GPR, NEON>,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_stlxrh(
&mut self,
sz: Size,
status: Location<GPR, NEON>,
reg: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_mov(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_movn(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
val: u32,
) -> Result<(), CompileError>;
fn emit_movz(
&mut self,
reg: Location<GPR, NEON>,
val: u32,
) -> Result<(), CompileError>;
fn emit_movk(
&mut self,
reg: Location<GPR, NEON>,
val: u32,
shift: u32,
) -> Result<(), CompileError>;
fn emit_mov_imm(
&mut self,
dst: Location<GPR, NEON>,
val: u64,
) -> Result<(), CompileError>;
fn emit_add(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_sub(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_mul(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_adds(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_subs(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_add_lsl(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
lsl: u32,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_cmp(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_tst(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_lsl(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_lsr(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_asr(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ror(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_or(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_and(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_eor(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_bfc(
&mut self,
se: Size,
lsb: u32,
width: u32,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_bfi(
&mut self,
se: Size,
src: Location<GPR, NEON>,
lsb: u32,
width: u32,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_udiv(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_sdiv(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_msub(
&mut self,
sz: Size,
a: Location<GPR, NEON>,
b: Location<GPR, NEON>,
c: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_sxtb(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_sxth(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_sxtw(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_uxtb(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_uxth(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_cset(
&mut self,
sz: Size,
dst: Location<GPR, NEON>,
cond: Condition,
) -> Result<(), CompileError>;
fn emit_csetm(
&mut self,
sz: Size,
dst: Location<GPR, NEON>,
cond: Condition,
) -> Result<(), CompileError>;
fn emit_cinc(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
cond: Condition,
) -> Result<(), CompileError>;
fn emit_clz(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_rbit(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_label(&mut self, label: DynamicLabel) -> Result<(), CompileError>;
fn emit_load_label(
&mut self,
reg: GPR,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_b_label(&mut self, label: DynamicLabel) -> Result<(), CompileError>;
fn emit_cbz_label(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_cbnz_label(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_cbz_label_far(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_tbz_label(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
n: u32,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_tbnz_label(
&mut self,
sz: Size,
reg: Location<GPR, NEON>,
n: u32,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_bcond_label(
&mut self,
condition: Condition,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_bcond_label_far(
&mut self,
condition: Condition,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_b_register(&mut self, reg: GPR) -> Result<(), CompileError>;
fn emit_call_label(
&mut self,
label: DynamicLabel,
) -> Result<(), CompileError>;
fn emit_call_register(&mut self, reg: GPR) -> Result<(), CompileError>;
fn emit_ret(&mut self) -> Result<(), CompileError>;
fn emit_udf(&mut self, payload: u16) -> Result<(), CompileError>;
fn emit_dmb(&mut self) -> Result<(), CompileError>;
fn emit_brk(&mut self) -> Result<(), CompileError>;
fn emit_fcmp(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fneg(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fsqrt(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fadd(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fsub(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fmul(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fdiv(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fmin(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fmax(
&mut self,
sz: Size,
src1: Location<GPR, NEON>,
src2: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_frintz(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_frintn(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_frintm(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_frintp(
&mut self,
sz: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_scvtf(
&mut self,
sz_in: Size,
src: Location<GPR, NEON>,
sz_out: Size,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_ucvtf(
&mut self,
sz_in: Size,
src: Location<GPR, NEON>,
sz_out: Size,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fcvt(
&mut self,
sz_in: Size,
src: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fcvtzs(
&mut self,
sz_in: Size,
src: Location<GPR, NEON>,
sz_out: Size,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fcvtzu(
&mut self,
sz_in: Size,
src: Location<GPR, NEON>,
sz_out: Size,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_fmov(
&mut self,
src_size: Size,
src: Location<GPR, NEON>,
dst_size: Size,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>;
fn emit_cnt(&mut self, src: NEON, dst: NEON) -> Result<(), CompileError>;
fn emit_addv(&mut self, src: NEON, dst: NEON) -> Result<(), CompileError>;
fn emit_read_fpcr(&mut self, reg: GPR) -> Result<(), CompileError>;
fn emit_write_fpcr(&mut self, reg: GPR) -> Result<(), CompileError>;
fn emit_read_fpsr(&mut self, reg: GPR) -> Result<(), CompileError>;
fn emit_write_fpsr(&mut self, reg: GPR) -> Result<(), CompileError>;
// Provided methods
fn arch_supports_canonicalize_nan(&self) -> bool { ... }
fn arch_requires_indirect_call_trampoline(&self) -> bool { ... }
fn arch_emit_indirect_call_with_trampoline(
&mut self,
_loc: Location<GPR, NEON>,
) -> Result<(), CompileError> { ... }
}
Required Methods§
fn get_label(&mut self) -> DynamicLabel
fn get_offset(&self) -> AssemblyOffset
fn get_jmp_instr_size(&self) -> u8
fn finalize_function(&mut self)
fn emit_str( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldr( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_stur( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: GPR, offset: i32, ) -> Result<(), CompileError>
fn emit_ldur( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: GPR, offset: i32, ) -> Result<(), CompileError>
fn emit_strdb( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: GPR, offset: u32, ) -> Result<(), CompileError>
fn emit_stria( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: GPR, offset: u32, ) -> Result<(), CompileError>
fn emit_ldria( &mut self, sz: Size, reg: Location<GPR, NEON>, addr: GPR, offset: u32, ) -> Result<(), CompileError>
fn emit_stpdb( &mut self, sz: Size, reg1: Location<GPR, NEON>, reg2: Location<GPR, NEON>, addr: GPR, offset: u32, ) -> Result<(), CompileError>
fn emit_ldpia( &mut self, sz: Size, reg1: Location<GPR, NEON>, reg2: Location<GPR, NEON>, addr: GPR, offset: u32, ) -> Result<(), CompileError>
fn emit_ldrb( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldrh( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldrsb( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldrsh( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldrsw( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_strb( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_strh( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldaxr( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldaxrb( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ldaxrh( &mut self, sz: Size, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_stlxr( &mut self, sz: Size, status: Location<GPR, NEON>, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_stlxrb( &mut self, sz: Size, status: Location<GPR, NEON>, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_stlxrh( &mut self, sz: Size, status: Location<GPR, NEON>, reg: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_mov( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_movn( &mut self, sz: Size, reg: Location<GPR, NEON>, val: u32, ) -> Result<(), CompileError>
fn emit_movz( &mut self, reg: Location<GPR, NEON>, val: u32, ) -> Result<(), CompileError>
fn emit_movk( &mut self, reg: Location<GPR, NEON>, val: u32, shift: u32, ) -> Result<(), CompileError>
fn emit_mov_imm( &mut self, dst: Location<GPR, NEON>, val: u64, ) -> Result<(), CompileError>
fn emit_add( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_sub( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_mul( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_adds( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_subs( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_add_lsl( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, lsl: u32, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_cmp( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_tst( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_lsl( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_lsr( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_asr( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ror( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_or( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_and( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_eor( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_bfc( &mut self, se: Size, lsb: u32, width: u32, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_bfi( &mut self, se: Size, src: Location<GPR, NEON>, lsb: u32, width: u32, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_udiv( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_sdiv( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
sourcefn emit_msub(
&mut self,
sz: Size,
a: Location<GPR, NEON>,
b: Location<GPR, NEON>,
c: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>
fn emit_msub( &mut self, sz: Size, a: Location<GPR, NEON>, b: Location<GPR, NEON>, c: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
msub : c - a*b -> dst
fn emit_sxtb( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_sxth( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_sxtw( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_uxtb( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_uxth( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_cset( &mut self, sz: Size, dst: Location<GPR, NEON>, cond: Condition, ) -> Result<(), CompileError>
fn emit_csetm( &mut self, sz: Size, dst: Location<GPR, NEON>, cond: Condition, ) -> Result<(), CompileError>
fn emit_cinc( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, cond: Condition, ) -> Result<(), CompileError>
fn emit_clz( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_rbit( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_label(&mut self, label: DynamicLabel) -> Result<(), CompileError>
fn emit_load_label( &mut self, reg: GPR, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_b_label(&mut self, label: DynamicLabel) -> Result<(), CompileError>
fn emit_cbz_label( &mut self, sz: Size, reg: Location<GPR, NEON>, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_cbnz_label( &mut self, sz: Size, reg: Location<GPR, NEON>, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_cbz_label_far( &mut self, sz: Size, reg: Location<GPR, NEON>, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_tbz_label( &mut self, sz: Size, reg: Location<GPR, NEON>, n: u32, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_tbnz_label( &mut self, sz: Size, reg: Location<GPR, NEON>, n: u32, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_bcond_label( &mut self, condition: Condition, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_bcond_label_far( &mut self, condition: Condition, label: DynamicLabel, ) -> Result<(), CompileError>
fn emit_b_register(&mut self, reg: GPR) -> Result<(), CompileError>
fn emit_call_label(&mut self, label: DynamicLabel) -> Result<(), CompileError>
fn emit_call_register(&mut self, reg: GPR) -> Result<(), CompileError>
fn emit_ret(&mut self) -> Result<(), CompileError>
fn emit_udf(&mut self, payload: u16) -> Result<(), CompileError>
fn emit_dmb(&mut self) -> Result<(), CompileError>
fn emit_brk(&mut self) -> Result<(), CompileError>
fn emit_fcmp( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fneg( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fsqrt( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fadd( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fsub( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fmul( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fdiv( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fmin( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fmax( &mut self, sz: Size, src1: Location<GPR, NEON>, src2: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_frintz( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_frintn( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_frintm( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_frintp( &mut self, sz: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_scvtf( &mut self, sz_in: Size, src: Location<GPR, NEON>, sz_out: Size, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_ucvtf( &mut self, sz_in: Size, src: Location<GPR, NEON>, sz_out: Size, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fcvt( &mut self, sz_in: Size, src: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fcvtzs( &mut self, sz_in: Size, src: Location<GPR, NEON>, sz_out: Size, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fcvtzu( &mut self, sz_in: Size, src: Location<GPR, NEON>, sz_out: Size, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_fmov( &mut self, src_size: Size, src: Location<GPR, NEON>, dst_size: Size, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
fn emit_cnt(&mut self, src: NEON, dst: NEON) -> Result<(), CompileError>
fn emit_addv(&mut self, src: NEON, dst: NEON) -> Result<(), CompileError>
fn emit_read_fpcr(&mut self, reg: GPR) -> Result<(), CompileError>
fn emit_write_fpcr(&mut self, reg: GPR) -> Result<(), CompileError>
fn emit_read_fpsr(&mut self, reg: GPR) -> Result<(), CompileError>
fn emit_write_fpsr(&mut self, reg: GPR) -> Result<(), CompileError>
Provided Methods§
fn arch_supports_canonicalize_nan(&self) -> bool
fn arch_requires_indirect_call_trampoline(&self) -> bool
fn arch_emit_indirect_call_with_trampoline( &mut self, _loc: Location<GPR, NEON>, ) -> Result<(), CompileError>
Implementations on Foreign Types§
source§impl EmitterARM64 for VecAssembler<Aarch64Relocation>
impl EmitterARM64 for VecAssembler<Aarch64Relocation>
source§fn emit_msub(
&mut self,
sz: Size,
a: Location<GPR, NEON>,
b: Location<GPR, NEON>,
c: Location<GPR, NEON>,
dst: Location<GPR, NEON>,
) -> Result<(), CompileError>
fn emit_msub( &mut self, sz: Size, a: Location<GPR, NEON>, b: Location<GPR, NEON>, c: Location<GPR, NEON>, dst: Location<GPR, NEON>, ) -> Result<(), CompileError>
msub : c - a*b -> dst