Home | History | Annotate | Download | only in mips
      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