Lines Matching refs:instr
148 bool WantToInstrument(instr_t *instr) {
150 switch (instr_get_opcode(instr)) {
158 if (instr_is_label(instr))
161 CHECK(instr_ok_to_mangle(instr) == true);
163 if (instr_writes_memory(instr)) {
164 for (int d = 0; d < instr_num_dsts(instr); d++) {
165 opnd_t op = instr_get_dst(instr, d);
177 void InstrumentMops(void *drcontext, instrlist_t *bb, instr_t *instr, opnd_t op,
180 uint flags = instr_get_arith_flags(instr);
192 dr_save_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
193 dr_save_arith_flags_to_xax(drcontext, bb, instr);
194 dr_save_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_3);
195 dr_restore_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
222 // Pick R2 that's not R1 or used by the operand. It's OK if the instr uses
223 // R2 elsewhere, since we'll restore it before instr.
239 dr_save_reg(drcontext, bb, instr, R1, SPILL_SLOT_1);
241 dr_save_reg(drcontext, bb, instr, R2, SPILL_SLOT_2);
244 CHECK(drutil_insert_get_mem_addr(drcontext, bb, instr, op, R1, R2));
245 PRE(instr, mov_imm(drcontext, opnd_create_reg(R2),
247 PRE(instr, and(drcontext, opnd_create_reg(R1), opnd_create_reg(R2)));
253 PRE(instr,
259 PRE(instr,
265 dr_restore_reg(drcontext, bb, instr, R1, SPILL_SLOT_1);
266 dr_restore_reg(drcontext, bb, instr, R2, SPILL_SLOT_2);
272 dr_save_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
273 dr_restore_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_3);
274 dr_restore_arith_flags_from_xax(drcontext, bb, instr);
275 dr_restore_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
282 void InstrumentReturn(void *drcontext, instrlist_t *bb, instr_t *instr) {
283 dr_save_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
287 dr_insert_get_seg_base(drcontext, bb, instr, DR_SEG_FS, DR_REG_XAX);
291 PRE(instr,
295 dr_restore_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
302 instr_t *instr) {
303 dr_save_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
307 dr_insert_get_seg_base(drcontext, bb, instr, DR_SEG_FS, DR_REG_XAX);
312 PRE(instr,
318 dr_restore_reg(drcontext, bb, instr, DR_REG_XAX, SPILL_SLOT_1);
418 instr_t *instr;
419 for (instr = instrlist_first(bb); instr; instr = instr_get_next(instr)) {
420 dr_printf("opcode: %d\n", instr_get_opcode(instr));