void MethodBlock::iget(DexField* field, Location obj, Location& dst) { always_assert(field->is_concrete() && !(field->get_access() & ACC_STATIC)); DexOpcode opcode; char t = type_shorty(field->get_type()); switch (t) { case 'Z': opcode = OPCODE_IGET_BOOLEAN; break; case 'B': opcode = OPCODE_IGET_BYTE; break; case 'S': opcode = OPCODE_IGET_SHORT; break; case 'C': opcode = OPCODE_IGET_CHAR; break; case 'I': case 'F': opcode = OPCODE_IGET; break; case 'J': case 'D': opcode = OPCODE_IGET_WIDE; break; case 'L': case '[': opcode = OPCODE_IGET_OBJECT; break; default: always_assert(false); break; } ifield_op(opcode, field, obj, dst); }
void MethodBlock::iput(DexField* field, Location obj, Location src) { always_assert(field->is_concrete() && !is_static(field)); IROpcode opcode; char t = type_shorty(field->get_type()); switch (t) { case 'Z': opcode = OPCODE_IPUT_BOOLEAN; break; case 'B': opcode = OPCODE_IPUT_BYTE; break; case 'S': opcode = OPCODE_IPUT_SHORT; break; case 'C': opcode = OPCODE_IPUT_CHAR; break; case 'I': case 'F': opcode = OPCODE_IPUT; break; case 'J': case 'D': opcode = OPCODE_IPUT_WIDE; break; case 'L': case '[': opcode = OPCODE_IPUT_OBJECT; break; default: always_assert(false); break; } ifield_op(opcode, field, obj, src); }