> Sanjiv Kumar Gupta wrote:
> 
> > > What is stopping the value of 'foo' itself being
> > 255?
> > Programmer will get an overflow error for that
> during linking.
> 
> For my curiosity, what's the background here? Do you
> really only have 256
> bytes of storage on this system?
> 
That was just an example. We have an
"segment_base+offset" insn with 16-bit offset.

> If you've got eight bit registers in a larger
> address space then I'd expect
> you'd want to address data outside the first 256
> bytes, e.g. you'd actually
> want
> 
>     add r1, lowpart_offset(foo)
>     add r2, highpart_offset(foo)
> 
> in which case
> 
>     add r1, lowpart_offset(foo + 10)
>     add r2, highpart_offset(foo + 10)
> 
> would make sense.
> 
> On the other hand, if you actually do only have 256
> bytes storage then you'd
> want to the link to fail anyway because the hardware
> won't cope - so the
> overflow error is as good as anything else, isn't
> it?
> 
> Rup.
> 
The problem at my hand is that the code like
j = 10; // global
main ()
{ int i;
 i = a[j - 10];
}
doesn't work with -O2 but it works without -O2.

-O2 generates like
  add1 r1, segment_base, (a - 40)
  add2 r1, 40

Since 'a' is at the boundary of segment so 'a - 40'
causes relocation overflow.

But the same code works without -O2, because that
generates code like
  add1 r1, segment_base, a
  add2 r1, -40
  add2 r1, 40

So, all I want to do is don't allow 'a - 40' in 'add1'
so that -O2 doesn't seem to be broken.

thanks
--Sanjiv
> 
> 
> 


                
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/ 

Reply via email to