Ian, Thanks for all your help so far. I now think I am closer to my goal. In order to execute : XOR [EBP+4], [EBP] after executing : PUSH EBP in the prologue, I need to use : emit_insn (gen_xorsi3 (DESTREG, SRC1, SRC2)); So I checked and I can generate a register such that: rtx ebp_reg = gen_rtx_REG(Pmode, BP_REG); this would be a hard register. rtx ebp_plus = gen_rtx_PLUS(Pmode, ebp_reg, 4); so now executing :- emit_insn (gen_xorsi3 (ebp_plus, ebp_plus, ebp_reg)); I dont know if ebp_plus would be converted to [XOR+4] or not, although it is derived from the hard register ebp_reg. If I am wrong in this approach, please correct me. Thank You for all your help so far. On Thu, Apr 15, 2010 at 10:16 AM, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: > Vaibhav Shrimali <vaibhav.shrimali@xxxxxxxxx> writes: > >> now I have stored the memory location, where I need to insert my >> value, in the EDX register. I am not using force_reg() now. >> I have stored the value to be inserted in a rtx type register. >> But how do I set the value of memory location in EDX with the value >> stored in a rtx type register? >> Is there any library function which will allow me to do so? >> >> Here is my code: >> >> if (frame_pointer_needed) >> { rtx r, set1,m1,edx,insn,temp; >> //Here hard frame pointer is pushed onto the stack >> insn = emit_insn (gen_push (hard_frame_pointer_rtx)); >> RTX_FRAME_RELATED_P (insn) = 1; >> //Here hard frame pointer is updated >> insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx); >> RTX_FRAME_RELATED_P (insn) = 1; >> >> //my code starts from here. >> r = cfun->machine->force_align_arg_pointer; >> r = gen_rtx_PLUS (Pmode, r, -8); >> r = gen_rtx_MEM (Pmode, r); >> edx = gen_rtx_REG (Pmode, DX_REG); >> emit_move_insn(edx,r); >> //EDX now contains the memory location >> >> //Here I have stored the return address pushed on the stack in ret_addr >> //So the following code generates a rtx variable >> //which has the value ret_addr XOR hard_frame_pointer >> >> m1 = simplify_binary_operation(XOR, Pmode, ret_addr, >> hard_frame_pointer_rtx); >> //now how to set memory location in edx with value m1??? Is there >> any function >> //to do so.If not, please suggest me some other way of doing so. >> >> } > > You need to put the result of m1 somewhere. There isn't really any > need to call simplify_binary_operation here. To make this work, you > should know precisely which instructions you are doing to generate. > You can just generate them. E.g., > emit_insn (gen_xorsi3 (DESTREG, SRC1, SRC2)); > > Ian > -- Vaibhav Shrimali BTech(ICT), DA-IICT Gandhinagar