An off by one error, which you got it right for aarch64. diff --git a/jsrc/x15.c b/jsrc/x15.c index 51fc211..f13da13 100644 --- a/jsrc/x15.c +++ b/jsrc/x15.c @@ -974,7 +974,7 @@ static B jtcdexec1(J jt,CCT*cc,C*zv0,C*wu,I wk,I wt,I wd){A*wv=(A*)wu,x,y,*zv;B CDASSERT(16>=fcnt,DELIMIT); CDASSERT(16>=dcnt,DELIMIT); #elif SY_UNIX64 && defined(__x86_64__) - if(dcnt>8&&dv-data<6)dv=data+dcnt-2; /* update dv to point to the end */ + if(dcnt>8&&dv-data<=6)dv=data+dcnt-2; /* update dv to point to the end */ #elif SY_UNIX64 && defined(__aarch64__) if(dcnt>8&&dv-data<=8)dv=data+dcnt; /* update dv to point to the end */ #elif !SY_64
As for ppc64le, I can't test it, but if anyone is interested, assuming abi remains the same, I would say the only thing depends on the endianness is the storing of float as int, in x15.c 917 #if defined(__PPC64__) 918 /* +1 put the float in low bits in dv, but dd has to be D */ 919 *dv=0; *(((float*)dv++)+1)=(float)(dd[dcnt++]=*(D*)xv); There wouldn't be a +1. > On Sep 24, 2016, at 10:56 AM, bill lam <bbill....@gmail.com> wrote: > > I studied your code but couldn't understand some > of them. Anyways I also implemented cd call for > arm64 by copying your codes. I had added some > tests for corner cases in gdll_df which arm64 > can passed but linux64 cannot. Can you take > a look? > > A rebuilt of tsdll is required for test. > > -- > regards, > ==================================================== > GPG key 1024D/4434BAB3 2008-08-24 > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 > gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm