Inline-Lua
view release on metacpan or search on metacpan
ffi/target/release/build/mlua-sys-6a99a2ae50f12319/out/luajit-build/build/src/host/buildvm_arch.h view on Meta::CPAN
//||case BC_ISGE:
//| ge target
//||break;
//||case BC_ISLE:
//| le target
//||break;
//||case BC_ISGT:
//| gt target
//||break;
//||default: break; /* Shut up GCC. */
//||}
//|.endmacro
case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
//| // RA = src1, RD = src2, JMP with RD = target
//| ins_AD
//| mov ITYPE, [BASE+RA*8]
//| mov RB, [BASE+RD*8]
//| mov RA, ITYPE
//| mov RD, RB
//| sar ITYPE, 47
//| sar RB, 47
//|.if DUALNUM
//| cmp ITYPEd, LJ_TISNUM; jne >7
//| cmp RBd, LJ_TISNUM; jne >8
//| add PC, 4
//| cmp RAd, RDd
//| jmp_comp jge, jl, jg, jle, >9
//|6:
//| movzx RDd, PC_RD
//| branchPC RD
//|9:
//| ins_next
//|
//|7: // RA is not an integer.
//| ja ->vmeta_comp
//| // RA is a number.
//| cmp RBd, LJ_TISNUM; jb >1; jne ->vmeta_comp
//| // RA is a number, RD is an integer.
//| cvtsi2sd xmm0, RDd
//| jmp >2
//|
//|8: // RA is an integer, RD is not an integer.
//| ja ->vmeta_comp
//| // RA is an integer, RD is a number.
//| cvtsi2sd xmm1, RAd
//| movd xmm0, RD
//| jmp >3
//|.else
//| cmp ITYPEd, LJ_TISNUM; jae ->vmeta_comp
//| cmp RBd, LJ_TISNUM; jae ->vmeta_comp
//|.endif
//|1:
//| movd xmm0, RD
//|2:
//| movd xmm1, RA
//|3:
//| add PC, 4
//| ucomisd xmm0, xmm1
//| // Unordered: all of ZF CF PF set, ordered: PF clear.
//| // To preserve NaN semantics GE/GT branch on unordered, but LT/LE don't.
//|.if DUALNUM
//| jmp_comp jbe, ja, jb, jae, <9
//| jmp <6
//|.else
//| jmp_comp jbe, ja, jb, jae, >1
dasm_put(Dst, 9765, LJ_TISNUM, LJ_TISNUM);
switch (op) {
case BC_ISLT:
dasm_put(Dst, 9831);
break;
case BC_ISGE:
dasm_put(Dst, 9836);
break;
case BC_ISLE:
dasm_put(Dst, 2922);
break;
case BC_ISGT:
dasm_put(Dst, 9841);
break;
default: break; /* Shut up GCC. */
}
#line 2896 "vm_x64.dasc"
//| movzx RDd, PC_RD
//| branchPC RD
//|1:
//| ins_next
//|.endif
dasm_put(Dst, 9846, -BCBIAS_J*4);
#line 2901 "vm_x64.dasc"
break;
case BC_ISEQV: case BC_ISNEV:
vk = op == BC_ISEQV;
//| ins_AD // RA = src1, RD = src2, JMP with RD = target
//| mov RB, [BASE+RD*8]
//| mov ITYPE, [BASE+RA*8]
//| add PC, 4
//| mov RD, RB
//| mov RA, ITYPE
//| sar RB, 47
//| sar ITYPE, 47
//|.if DUALNUM
//| cmp RBd, LJ_TISNUM; jne >7
//| cmp ITYPEd, LJ_TISNUM; jne >8
//| cmp RDd, RAd
dasm_put(Dst, 9881);
#line 2917 "vm_x64.dasc"
if (vk) {
//| jne >9
} else {
//| je >9
}
//| movzx RDd, PC_RD
//| branchPC RD
//|9:
//| ins_next
//|
//|7: // RD is not an integer.
//| ja >5
//| // RD is a number.
( run in 0.907 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )