100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* 200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * Return the length of an array. 300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze */ 400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze srl a1, rINST, 12 # a1 <- B 500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_VREG_U a0, a1 # a0 <- vB (object ref) 600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze ext a2, rINST, 8, 4 # a2 <- A 700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze beqz a0, common_errNullObject # yup, fail 800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze FETCH_ADVANCE_INST 1 # advance rPC, load rINST 900b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze lw a3, MIRROR_ARRAY_LENGTH_OFFSET(a0) # a3 <- array length 1000b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_INST_OPCODE v0 # extract opcode from rINST 1100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze SET_VREG a3, a2 # vB <- length 1200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GOTO_OPCODE v0 # jump to next instruction 13