• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%verify "executed"
2%verify "String already resolved"
3%verify "String not yet resolved"
4%verify "String cannot be resolved"
5    # const/string vAA, String             /* BBBBBBBB */
6    FETCH(a0, 1)                           #  a0 <- bbbb (low)
7    FETCH(a1, 2)                           #  a1 <- BBBB (high)
8    LOAD_rSELF_methodClassDex(a2)          #  a2 <- self->methodClassDex
9    GET_OPA(rOBJ)                          #  rOBJ <- AA
10    LOAD_base_offDvmDex_pResStrings(a2, a2) #  a2 <- dvmDex->pResStrings
11    sll       a1, a1, 16
12    or        a1, a1, a0                   #  a1 <- BBBBbbbb
13    LOAD_eas2(v0, a2, a1)                  #  v0 <- pResStrings[BBBB]
14    bnez      v0, .L${opcode}_resolve
15
16    /*
17     * Continuation if the String has not yet been resolved.
18     *  a1: BBBBBBBB (String ref)
19     *  rOBJ: target register
20     */
21    EXPORT_PC()
22    LOAD_rSELF_method(a0)                  #  a0 <- self->method
23    LOAD_base_offMethod_clazz(a0, a0)      #  a0 <- method->clazz
24    JAL(dvmResolveString)                  #  v0 <- String reference
25    # failed?
26    beqz      v0, common_exceptionThrown   #  yup, handle the exception
27
28.L${opcode}_resolve:
29    FETCH_ADVANCE_INST(3)                  #  advance rPC, load rINST
30    GET_INST_OPCODE(t1)                    #  extract opcode from rINST
31    SET_VREG_GOTO(v0, rOBJ, t1)            #  vAA <- v0
32
33