Slide 9
Slide 9 text
Array#size
fn array_size(bb: &mut BBContext, ir: &mut AsmIr, _: &JitContext, _: &Store,
callsite: &CallSiteInfo, _: ClassId) -> bool {
if !callsite.is_simple() { return false; }
let dst = callsite.dst;
ir.inline(move |gen, _, _| {
monoasm! { &mut gen.jit,
movq rax, [rdi + (RVALUE_OFFSET_ARY_CAPA)];
cmpq rax, (ARRAY_INLINE_CAPA);
cmovgtq rax, [rdi + (RVALUE_OFFSET_HEAP_LEN)];
salq rax, 1;
orq rax, 1;
}
});
bb.reg2acc_fixnum(ir, GP::Rax, dst);
true
}