On Mon, Jun 6, 2011 at 11:34 AM, Rony Paul <ronypaul77@xxxxxxxxx> wrote: > On Fri, May 27, 2011 at 4:51 PM, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: >> Rony Paul <ronypaul77@xxxxxxxxx> writes: >> >>> suppose I have the following piece of code in my program. >>> >>> extern int __ea x; >>> int y; >>> y = x; >>> >>> that means I am copying data from one address space to another. >>> in that case will the method spu_addr_space_convert (rtx op, tree >>> from_type, tree to_type); be called by the compiler? >>> in the spu.c file the defination of " spu_addr_space_convert " is >>> given. but when and under which condition they will be called ? >> >> I'm pretty sure it won't be called. That function converts a pointer to >> one address space into a pointer to a different address space. No such >> conversion is happening here. >> >>> where >>> is it defined? >> >> The function spu_addr_space_convert is the SPU-specific implementation >> of the target hook TARGET_ADDR_SPACE_CONVERT which is documented in the >> section on named address spaces. >> >> Ian >> > > > Then if I want to prevent these type of copying data from one address > space to another (ie. I dont want to allow these type of copy > operation in my application). where should I write code in GCC > compiler? > > Actually I can define different address space, but still I cant store > there data in different byte order. would you give me any idea about > how to store data in different byte order in different address space? > > -Rony > please suggest me, > in c-type.c file there are some code like : =========================================================== asl = TYPE_ADDR_SPACE (ttl); asr = TYPE_ADDR_SPACE (ttr); if (!null_pointer_constant_p (rhs) && asr != asl && !targetm.addr_space.subset_p (asr, asl)) { switch (errtype) { case ic_argpass: error_at (location, "passing argument %d of %qE from pointer to " "non-enclosed address space", parmnum, rname); break; case ic_assign: error_at (location, "assignment from pointer to " "non-enclosed address space"); break; case ic_init: error_at (location, "initialization from pointer to " "non-enclosed address space"); break; case ic_return: error_at (location, "return from pointer to " "non-enclosed address space"); break; default: gcc_unreachable (); } return error_mark_node; } -================================================================== and in my program if I write code like, __ea int * p = malloc_ea(sizeof(int)); int * v; p=v; this returns error message "assignment from pointer to non-enclosed address space" so, this checking for pointer of the different address space is done for pointer. now if I want to add this check for data variable also, what should I do. I cant understand, would you please help me? ie. I want to write code like extern int __ea x; int y; and it should give error message like "assignment from variable to non-enclosed address space" Thanks