Branch opcodes have no result and either they have a stack argument
or no arguments at all. To improve the performance, the branch argument flag is changed into a get argument type which eliminates a flag check for all executed opcodes. Furthermore branch opcodes skip the put result phase by changing the "break" to "continue" statements. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -173,19 +173,19 @@
|
||||
|
||||
#define CBC_FORWARD_BRANCH(name, stack, vm_oc) \
|
||||
CBC_OPCODE (name, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG) \
|
||||
(vm_oc) | VM_OC_GET_BRANCH) \
|
||||
CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG) \
|
||||
(vm_oc) | VM_OC_GET_BRANCH) \
|
||||
CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG)
|
||||
(vm_oc) | VM_OC_GET_BRANCH)
|
||||
|
||||
#define CBC_BACKWARD_BRANCH(name, stack, vm_oc) \
|
||||
CBC_OPCODE (name, CBC_HAS_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH) \
|
||||
(vm_oc) | VM_OC_GET_BRANCH | VM_OC_BACKWARD_BRANCH) \
|
||||
CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH) \
|
||||
(vm_oc) | VM_OC_GET_BRANCH | VM_OC_BACKWARD_BRANCH) \
|
||||
CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG, stack, \
|
||||
(vm_oc) | VM_OC_HAS_BRANCH_ARG | VM_OC_BACKWARD_BRANCH)
|
||||
(vm_oc) | VM_OC_GET_BRANCH | VM_OC_BACKWARD_BRANCH)
|
||||
|
||||
#define CBC_BRANCH_OFFSET_LENGTH(opcode) \
|
||||
((opcode) & 0x3)
|
||||
@@ -221,19 +221,19 @@
|
||||
CBC_OPCODE (CBC_POP_BLOCK, CBC_NO_FLAG, -1, \
|
||||
VM_OC_POP_BLOCK | VM_OC_PUT_BLOCK) \
|
||||
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_TRUE_FORWARD, -1, \
|
||||
VM_OC_BRANCH_IF_TRUE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_TRUE) \
|
||||
CBC_OPCODE (CBC_THROW, CBC_NO_FLAG, -1, \
|
||||
VM_OC_THROW | VM_OC_GET_STACK) \
|
||||
CBC_BACKWARD_BRANCH (CBC_BRANCH_IF_TRUE_BACKWARD, -1, \
|
||||
VM_OC_BRANCH_IF_TRUE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_TRUE) \
|
||||
CBC_OPCODE (CBC_CONTEXT_END, CBC_NO_FLAG, 0, \
|
||||
VM_OC_CONTEXT_END) \
|
||||
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_FALSE_FORWARD, -1, \
|
||||
VM_OC_BRANCH_IF_FALSE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_FALSE) \
|
||||
CBC_OPCODE (CBC_CREATE_OBJECT, CBC_NO_FLAG, 1, \
|
||||
VM_OC_PUSH_OBJECT | VM_OC_PUT_STACK) \
|
||||
CBC_BACKWARD_BRANCH (CBC_BRANCH_IF_FALSE_BACKWARD, -1, \
|
||||
VM_OC_BRANCH_IF_FALSE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_FALSE) \
|
||||
CBC_OPCODE (CBC_SET_PROPERTY, CBC_HAS_LITERAL_ARG, -1, \
|
||||
VM_OC_SET_PROPERTY | VM_OC_GET_STACK_LITERAL) \
|
||||
CBC_FORWARD_BRANCH (CBC_JUMP_FORWARD_EXIT_CONTEXT, 0, \
|
||||
@@ -241,15 +241,15 @@
|
||||
CBC_OPCODE (CBC_CREATE_ARRAY, CBC_NO_FLAG, 1, \
|
||||
VM_OC_PUSH_ARRAY | VM_OC_PUT_STACK) \
|
||||
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_TRUE, -1, \
|
||||
VM_OC_BRANCH_IF_LOGICAL_TRUE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_LOGICAL_TRUE) \
|
||||
CBC_OPCODE (CBC_ARRAY_APPEND, CBC_HAS_POP_STACK_BYTE_ARG, 0, \
|
||||
VM_OC_APPEND_ARRAY) \
|
||||
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_FALSE, -1, \
|
||||
VM_OC_BRANCH_IF_LOGICAL_FALSE | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_LOGICAL_FALSE) \
|
||||
CBC_OPCODE (CBC_PUSH_ELISION, CBC_NO_FLAG, 1, \
|
||||
VM_OC_PUSH_ELISON | VM_OC_PUT_STACK) \
|
||||
CBC_FORWARD_BRANCH (CBC_BRANCH_IF_STRICT_EQUAL, -1, \
|
||||
VM_OC_BRANCH_IF_STRICT_EQUAL | VM_OC_GET_STACK) \
|
||||
VM_OC_BRANCH_IF_STRICT_EQUAL) \
|
||||
\
|
||||
/* Basic opcodes. */ \
|
||||
CBC_OPCODE (CBC_PUSH_LITERAL, CBC_HAS_LITERAL_ARG, 1, \
|
||||
@@ -515,11 +515,11 @@
|
||||
CBC_OPCODE (CBC_EXT_NOP, CBC_NO_FLAG, 0, \
|
||||
VM_OC_NONE) \
|
||||
CBC_FORWARD_BRANCH (CBC_EXT_WITH_CREATE_CONTEXT, \
|
||||
-1 + PARSER_WITH_CONTEXT_STACK_ALLOCATION, VM_OC_WITH | VM_OC_GET_STACK) \
|
||||
-1 + PARSER_WITH_CONTEXT_STACK_ALLOCATION, VM_OC_WITH) \
|
||||
CBC_OPCODE (CBC_EXT_FOR_IN_GET_NEXT, CBC_NO_FLAG, 1, \
|
||||
VM_OC_FOR_IN_GET_NEXT | VM_OC_PUT_STACK) \
|
||||
CBC_FORWARD_BRANCH (CBC_EXT_FOR_IN_CREATE_CONTEXT, \
|
||||
-1 + PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION, VM_OC_FOR_IN_CREATE_CONTEXT | VM_OC_GET_STACK) \
|
||||
-1 + PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION, VM_OC_FOR_IN_CREATE_CONTEXT) \
|
||||
CBC_OPCODE (CBC_EXT_SET_GETTER, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \
|
||||
VM_OC_SET_GETTER | VM_OC_GET_LITERAL_LITERAL) \
|
||||
CBC_BACKWARD_BRANCH (CBC_EXT_BRANCH_IF_FOR_IN_HAS_NEXT, 0, \
|
||||
|
||||
Reference in New Issue
Block a user