You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: jsrc/jtype.h
+16-5Lines changed: 16 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -982,17 +982,17 @@ typedef struct {
982
982
// the localuse fields are not freed or counted for space, as the f/g/h fields are. They are for local optimizations only.
983
983
union {
984
984
// start with the larger localuse, which requires a second cacheline. This is 16 bytes, the first 8 of which are in the excess (first) cacheline
985
-
I4clr[4]; // used to init to 0 - extends the union for 32-bit
985
+
// obsolete I4 clr[4]; // used to init to 0 - extends the union for 32-bit
986
986
struct {AFfunc; Iparm;} boxcut0; // for x <;.0 y and x (<;.0~ -~/"2)~ y, .parm is ~0 for first, 0 for second, and .func points to failover routine (seldom used). func in first cacheline
987
-
I4srank[4]; // for RANK conj, the signed ranks - extends the union in 32-bit
987
+
USsrank[4]; // for RANK conj, the signed ranks
988
988
// the rest do not require both cachelines in 64-bit
989
989
struct {
990
990
union {
991
991
Ifiller; // pad to cacheline
992
992
Acachedloc; // for namerefs ('name'~), the locale address if the name is a direct named lookup (after the first reference)
993
993
} lu0;
994
994
// end of first cacheline, which is not used much during execution
995
-
union { // 8 bytes in the second (main) cacheline
995
+
union { // 8 bytes in the second (main) cacheline. Aligned to 8-byte bdy even on 32-bit system
996
996
Dcct; // for comparison tolerance, FIT conj =!.n OR comparison combination (i.&1@:(e.[!.n])) OR [e. i. ([-.-.)]&n OR m&i[.:] the CCT, 0 for default (never in an actual prehash). For 32-bit, this extends the union, but that's OK since it doesn't add a cacheline.
997
997
struct {
998
998
I4cgerx; // For cyclic iterators, the index of the next gerund to execute. Here to avoid conflict with cut
@@ -1025,8 +1025,19 @@ typedef struct {
1025
1025
typedefstruct {
1026
1026
// the localuse fields are not freed or counted for space, as the f/g/h fields are. They are for local optimizations only.
1027
1027
union { // 8 bytes in the second (main) cacheline
1028
-
USuavandx[2]; // offset from start of va/va1tbl to VA/UA block for adocv [monad then dyad]
1029
-
Iforcetask; // for t., the flags extracted from n. Bits 0-7=thread pool; bit 8=worker thread only
1028
+
Dcct; // for comparison tolerance, FIT conj =!.n OR comparison combination (i.&1@:(e.[!.n])) OR [e. i. ([-.-.)]&n OR m&i[.:] the CCT, 0 for default (never in an actual prehash). For 32-bit, this extends the union, but that's OK since it doesn't add a cacheline.
1029
+
struct {
1030
+
I4cgerx; // For cyclic iterators, the index of the next gerund to execute. Here to avoid conflict with cut
1031
+
I4cutn; // for u;.n where n is nonzero, n. u/. also goes through this code. There could be cyclic iterators but not boxcut
1032
+
} gercut;
1033
+
VARPSA*redfn; // for reductions (u/ u/\ u/\.) address of rps block (may be dummy block)
1034
+
USuavandx[2]; // offset from start of va/va1tbl to VA/UA block for adocv [monad then dyad]
1035
+
AFfoldfn; // for Fold final operator, pointer to the dyadic EP of the handler (xdefn or unquote)
1036
+
Awvb; // for u&.[:]v, the verb whose inverse is needed
1037
+
Ilinkvb; // for dyads ; (,<) ,&[:]< indicates which function; for (compare[!.n] |), indicates which compare function
1038
+
Acachedref; // for namerefs ('name'~), the cached value, or 0 if not cached
1039
+
AFfork2hfn; // for dyad fork that is NOT a comparison combination or jtintersect, the function to call to process h (might be in h@][)
1040
+
Iforcetask; // for t., the flags extracted from n. Bits 0-7=thread pool; bit 8=worker thread only
1030
1041
} lu1; // this is the high-use stuff in the second cacheline
1031
1042
AFvalencefns[2]; // function to call for monad,dayd
1032
1043
Afgh[3]; // operands of modifiers. h is used for forks and also as a storage spot for parms. all 3 are freed when the V block is freed
0 commit comments