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

Reply via email to