dyad I. had been broken by me. In viix.c, the line
 case TT(LITX, LITX ): .... c>>=1; /* fall thru */
should just above line
 case TT(C2TX, C2TX ): BSLOOP(US,US); break;

try the patch below.

gdll_df tests for abi. abi for passing float and double depends
on platforms, windows, linux, macox, raspian and android, all 
of them use different abi. You need to study the abi spec of
linux ppc64 and confirm it is one that J engine can handle and
set correctly. see the comments in the beginning of x15.c

You may printf inside tsdll to see if values had been passed 
correctly and the value returned was what J engine had received.

regex depends on libjpcre.so, which is not part of J engine. You
may download pcre source from its official site and build the
binary yourself.


diff --git a/jsrc/viix.c b/jsrc/viix.c
index 1d80b31..072dd12 100644
--- a/jsrc/viix.c
+++ b/jsrc/viix.c
@@ -123,23 +123,23 @@ F2(jticap2){A*av,*wv,z;B b;C*uu,*vv;I 
ad,ar,*as,at,c,ck,cm,ge,gt,j,k,m,n,p,q,r,t
  }
  ge=cc; gt=-ge;
  switch(TT(CTTZ(at),CTTZ(wt))){
-  case TT(LITX, C4TX ): BSLOOP(UC,C4); break;
-  case TT(C2TX, C4TX ): BSLOOP(US,C4); break;
-  case TT(C4TX, LITX ): BSLOOP(C4,UC); break;
-  case TT(C4TX, C2TX ): BSLOOP(C4,US); break;
-  case TT(C4TX, C4TX ): BSLOOP(C4,C4); break;
-  case TT(LITX, C2TX ): BSLOOP(UC,US); break;
-  case TT(C2TX, C2TX ): BSLOOP(US,US); break;
-  case TT(C2TX, LITX ): BSLOOP(US,UC); break;
-  case TT(SBTX, SBTX ): BSLOOF(SB,SB, SBCOMP  ); break;
   case TT(B01X, B01X ): BSLOOP(C, C ); break;
   case TT(B01X, INTX ): BSLOOP(C, I ); break;
   case TT(B01X, FLX  ): BSLOOP(C, D ); break;
+  case TT(LITX, C2TX ): BSLOOP(UC,US); break;
+  case TT(LITX, C4TX ): BSLOOP(UC,C4); break;
 #if C_LE
   case TT(LITX, LITX ): BSLOOP(UC,UC); break;
 #else
   case TT(LITX, LITX ): if(1&c){BSLOOP(UC,UC); break;}else c>>=1; /* fall thru 
*/
 #endif
+  case TT(C2TX, C2TX ): BSLOOP(US,US); break;
+  case TT(C2TX, C4TX ): BSLOOP(US,C4); break;
+  case TT(C2TX, LITX ): BSLOOP(US,UC); break;
+  case TT(C4TX, C2TX ): BSLOOP(C4,US); break;
+  case TT(C4TX, C4TX ): BSLOOP(C4,C4); break;
+  case TT(C4TX, LITX ): BSLOOP(C4,UC); break;
+  case TT(SBTX, SBTX ): BSLOOF(SB,SB, SBCOMP  ); break;
   case TT(INTX, B01X ): BSLOOP(I, C ); break;
   case TT(INTX, INTX ): BSLOOP(I, I ); break;
   case TT(INTX, FLX  ): BSLOOP(I, D ); break;



Сб, 17 сен 2016, Xiao-Yong Jin написал(а):
> Nice detective work.
> With bill's patch, most of the crashes and failures are gone.
> 
> Increasing the stack size with ulimit -s 40960 passed gstack.
> The default 10240 for my account is not enough on ppc64, though
> the usual 8192 on mac and linux x86 works fine.
> 
> Now there are only two failures.
> gdll_df
> gicap2 
> 
> 
> For gicap2, it seems I. is not doing the correct thing with literals.
> 
>    'ab' I.~ 3 2$'abb'
> 3
>    'aa' I.~ 3 2$'abb'
> 3
>    'ba' I.~ 3 2$'abb'
> 3
> 
> though simple case works
> 
>    'ab' I.~ 'abc'
> 0 1
> 
> For gdll_df, it now fails at
> 
>    (4;1.5;2.5)= 'fff f f f' dcd 1.5;2.5
> 0 1 1
>    'fff f f f' dcd 1.5;2.5
> ┌─────┬───┬───┐
> │8.125│1.5│2.5│
> └─────┴───┴───┘
> 
> It does not seem to be an abi issue, since it passed a few tests.
> 
> One more thing.  I can't use regular expressions.
> 
>    rxcomp'a'
> |domain error: jregcomp
> |   'rxlastrc rxlastxrp'=:2{.    
> jregcomp(rxregxsz$2-2);(,y);2+RX_OPTIONS_UTF8*64
> 
> Not sure if it's related to the dll issue.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
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

Reply via email to