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 <[email protected]> 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