Hi, I want to add a new opcode ( for educational purpose ) and i have some questions.
First i explain what i want to do : I have a C struct : struct MyStruct { int MyField; } In the managed code, i have a property of type IntPtr ( MyManagedProp ). MyManagedProp is setup with a pointer to a MyStruct. I defined a new opcode "myopcode" in the files opcodes.def. This opcode, using a MyStruct pointer, must load the MyField value. So, in the managed code i am pushing the MyManagedProp on the stack, i am calling the myopcode which do some work. After i am calling an internal C function taking an int argument. I am thinking define the myopcode like the OP_STRLEN : reg: OP_MYOPCODE (reg) { MONO_EMIT_LOAD_MEMBASE_OP (s, tree, OP_LOADI4_MEMBASE, state->reg1, state->left->reg1, G_STRUCT_OFFSET (MyStruct, MyField)); } 1) Because my IntPtr is stored on the managed stack, should i add a pop command before the MONO_EMIT_LOAD_MEMBASE_OP ? 2) After MyField value is moved in a reg, i want to add a jit icall using this value. Should i add a push command to push it on the stack ? 3) Can i add the the icall directly in the burg file as : reg: OP_MYOPCODE (reg) { MONO_EMIT_LOAD_MEMBASE_OP (s, tree, OP_LOADI4_MEMBASE, state->reg1, state->left->reg1, G_STRUCT_OFFSET (MyStruct, MyField)); emit_call (cfg, code, MONO_PATCH_INFO_ABS, call->fptr); } 4) Any comments to explain how mono choose and manage registers are welcome :) Thanks. _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list