diff options
Diffstat (limited to 'vm/mterp/x86/OP_ARRAY_LENGTH.S')
-rw-r--r-- | vm/mterp/x86/OP_ARRAY_LENGTH.S | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/vm/mterp/x86/OP_ARRAY_LENGTH.S b/vm/mterp/x86/OP_ARRAY_LENGTH.S new file mode 100644 index 0000000..25caca3 --- /dev/null +++ b/vm/mterp/x86/OP_ARRAY_LENGTH.S @@ -0,0 +1,15 @@ +%verify "executed" + /* + * Return the length of an array. + */ + mov rINST,%eax # eax<- BA + sarl $$4,rINST # rINST<- B + GET_VREG_R %ecx rINST # ecx<- vB (object ref) + andb $$0xf,%al # eax<- A + testl %ecx,%ecx # is null? + je common_errNullObject + movl offArrayObject_length(%ecx),rINST + FETCH_INST_OPCODE 1 %ecx + ADVANCE_PC 1 + SET_VREG rINST %eax + GOTO_NEXT_R %ecx |