void MethodBlock::sput(DexField* field, Location src) { 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_SPUT_BOOLEAN; break; case 'B': opcode = OPCODE_SPUT_BYTE; break; case 'S': opcode = OPCODE_SPUT_SHORT; break; case 'C': opcode = OPCODE_SPUT_CHAR; break; case 'I': case 'F': opcode = OPCODE_SPUT; break; case 'J': case 'D': opcode = OPCODE_SPUT_WIDE; break; case 'L': case '[': opcode = OPCODE_SPUT_OBJECT; break; default: always_assert(false); break; } sfield_op(opcode, field, src); }
void MethodBlock::sget(DexField* field, Location& dst) { always_assert(field->is_concrete() && is_static(field)); IROpcode opcode; char t = type_shorty(field->get_type()); switch (t) { case 'Z': opcode = OPCODE_SGET_BOOLEAN; break; case 'B': opcode = OPCODE_SGET_BYTE; break; case 'S': opcode = OPCODE_SGET_SHORT; break; case 'C': opcode = OPCODE_SGET_CHAR; break; case 'I': case 'F': opcode = OPCODE_SGET; break; case 'J': case 'D': opcode = OPCODE_SGET_WIDE; break; case 'L': case '[': opcode = OPCODE_SGET_OBJECT; break; default: always_assert(false); break; } sfield_op(opcode, field, dst); }