Skip to content

Commit ac3aa30

Browse files
committed
Micro optimizations of the virtual machine:
- Branch argument information is encoded in the vm byte code data, so CBC flags are not loaded anymore - The free_flags variable is removed from the vm_loop - Two cases are removed from "get arguments", argument processing is simplified - The two opcode tables are merged to one - The VM_OC_POP opcode has no result, so the break is changed to continue. - The VM_OC_PUSH_NUMBER can use ecma_make_integer_value. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
1 parent be273d8 commit ac3aa30

File tree

3 files changed

+130
-170
lines changed

3 files changed

+130
-170
lines changed

jerry-core/parser/js/byte-code.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -173,19 +173,19 @@
173173

174174
#define CBC_FORWARD_BRANCH(name, stack, vm_oc) \
175175
CBC_OPCODE (name, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
176-
(vm_oc)) \
176+
(vm_oc) | VM_OC_HAS_BRANCH_ARG) \
177177
CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
178-
(vm_oc)) \
178+
(vm_oc) | VM_OC_HAS_BRANCH_ARG) \
179179
CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
180-
(vm_oc))
180+
(vm_oc) | VM_OC_HAS_BRANCH_ARG)
181181

182182
#define CBC_BACKWARD_BRANCH(name, stack, vm_oc) \
183183
CBC_OPCODE (name, CBC_HAS_BRANCH_ARG, stack, \
184-
(vm_oc)) \
184+
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH) \
185185
CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG, stack, \
186-
(vm_oc)) \
186+
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH) \
187187
CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG, stack, \
188-
(vm_oc))
188+
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH)
189189

190190
#define CBC_BRANCH_OFFSET_LENGTH(opcode) \
191191
((opcode) & 0x3)
@@ -243,7 +243,7 @@
243243
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_TRUE, -1, \
244244
VM_OC_BRANCH_IF_LOGICAL_TRUE | VM_OC_GET_STACK) \
245245
CBC_OPCODE (CBC_ARRAY_APPEND, CBC_HAS_POP_STACK_BYTE_ARG, 0, \
246-
VM_OC_APPEND_ARRAY | VM_OC_GET_BYTE) \
246+
VM_OC_APPEND_ARRAY) \
247247
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_FALSE, -1, \
248248
VM_OC_BRANCH_IF_LOGICAL_FALSE | VM_OC_GET_STACK) \
249249
CBC_OPCODE (CBC_PUSH_ELISION, CBC_NO_FLAG, 1, \
@@ -293,7 +293,7 @@
293293
CBC_OPCODE (CBC_PUSH_PROP_THIS_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG, 3, \
294294
VM_OC_PROP_REFERENCE | VM_OC_GET_THIS_LITERAL | VM_OC_PUT_STACK) \
295295
CBC_OPCODE (CBC_NEW, CBC_HAS_POP_STACK_BYTE_ARG, 0, \
296-
VM_OC_NEW | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \
296+
VM_OC_NEW | VM_OC_PUT_STACK) \
297297
CBC_OPCODE (CBC_NEW0, CBC_NO_FLAG, 0, \
298298
VM_OC_NEW | VM_OC_PUT_STACK) \
299299
CBC_OPCODE (CBC_NEW1, CBC_NO_FLAG, -1, \
@@ -399,17 +399,17 @@
399399
\
400400
/* Call opcodes. */ \
401401
CBC_OPCODE (CBC_CALL, CBC_HAS_POP_STACK_BYTE_ARG, -1, \
402-
VM_OC_CALL | VM_OC_GET_BYTE) \
402+
VM_OC_CALL) \
403403
CBC_OPCODE (CBC_CALL_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, 0, \
404-
VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \
404+
VM_OC_CALL | VM_OC_PUT_STACK) \
405405
CBC_OPCODE (CBC_CALL_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -1, \
406-
VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \
406+
VM_OC_CALL | VM_OC_PUT_BLOCK) \
407407
CBC_OPCODE (CBC_CALL_PROP, CBC_HAS_POP_STACK_BYTE_ARG, -3, \
408-
VM_OC_CALL | VM_OC_GET_BYTE) \
408+
VM_OC_CALL) \
409409
CBC_OPCODE (CBC_CALL_PROP_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, -2, \
410-
VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \
410+
VM_OC_CALL | VM_OC_PUT_STACK) \
411411
CBC_OPCODE (CBC_CALL_PROP_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -3, \
412-
VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \
412+
VM_OC_CALL | VM_OC_PUT_BLOCK) \
413413
CBC_OPCODE (CBC_CALL0, CBC_NO_FLAG, -1, \
414414
VM_OC_CALL) \
415415
CBC_OPCODE (CBC_CALL0_PUSH_RESULT, CBC_NO_FLAG, 0, \

0 commit comments

Comments
 (0)