View Single Post
Old 09 January 2017, 17:56   #7
alkis
Registered User
 
Join Date: Dec 2010
Location: Athens/Greece
Age: 53
Posts: 719
This is from gcc3.4.0
Code:
void test()
{
   ({ CONST_STRPTR _Open_v1 = (""); LONG _Open_v2 = (1005); BPTR _Open_re2 = ({ register int _d1 __asm("d1"); register int _a0 __asm("a0"); register int _a1 __asm("a1"); register BPTR _Open_re __asm("d0"); register void *const _Open_bn __asm("a6") = (DOSBase); register CONST_STRPTR _n1 __asm("d1") = _Open_v1; register LONG _n2 __asm("d2") = _Open_v2; __asm volatile ("jsr a6@(-""0x1e"":W)" : "=r" (_Open_re), "=r" (_d1), "=r" (_a0), "=r" (_a1) : "r" (_Open_bn), "rf"(_n1), "rf"(_n2) : "fp0", "fp1", "cc", "memory"); _Open_re; }); _Open_re2; });
}
Looks like the 6.x series states that the parameters (d1,d2) are clobbered (unspecified) after the block, while 3.x doesn't state that.

Interestingly enough, the 6.x says that a0,a1 are clobbered and 3.x does not.

Last edited by alkis; 09 January 2017 at 17:59. Reason: a0/a1
alkis is offline  
 
Page generated in 0.28434 seconds with 11 queries