summaryrefslogtreecommitdiff
path: root/vm/mterp/x86/OP_INT_TO_LONG.S
diff options
context:
space:
mode:
Diffstat (limited to 'vm/mterp/x86/OP_INT_TO_LONG.S')
-rw-r--r--vm/mterp/x86/OP_INT_TO_LONG.S14
1 files changed, 14 insertions, 0 deletions
diff --git a/vm/mterp/x86/OP_INT_TO_LONG.S b/vm/mterp/x86/OP_INT_TO_LONG.S
new file mode 100644
index 0000000..13f7483
--- /dev/null
+++ b/vm/mterp/x86/OP_INT_TO_LONG.S
@@ -0,0 +1,14 @@
+%verify "executed"
+ /* int to long vA, vB */
+ movzbl rINST_HI,%ecx # ecx<- +A
+ sarl $$12,rINST_FULL # rINST_FULL<- B
+ GET_VREG(%eax,rINST_FULL) # eax<- vB
+ SPILL(rPC) # will step on edx later
+ andb $$0xf,%cl # ecx<- A
+ cltd # edx:eax<- sssssssBBBBBBBB
+ SET_VREG_WORD(%edx,%ecx,1) # v[A+1]<- edx/rPC
+ UNSPILL(rPC)
+ SET_VREG_WORD(%eax,%ecx,0) # v[A+0]<- %eax
+ FETCH_INST_WORD(1)
+ ADVANCE_PC(1)
+ GOTO_NEXT