Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jets: refactors and optimizes tree-math jets #397

Merged
merged 17 commits into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions pkg/noun/jets/c/hub.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "jets/q.h"
#include "jets/w.h"

#include "noun.h"

u3_noun
u3qc_hub(u3_atom a, u3_atom b)
{
c3_w a_w, b_w, c_w;

if ( 1 == a ) return u3k(b);

a_w = u3r_met(0, a);
b_w = u3r_met(0, b);

if ( b_w < a_w ) return u3m_bail(c3__exit);

c_w = b_w - a_w;

if ( (c3y == u3a_is_cat(a)) && (c3y == u3a_is_cat(b)) ) {
if ( a != (b >> c_w) ) return u3m_bail(c3__exit);

return b & ((1 << c_w) - 1);
eamsden marked this conversation as resolved.
Show resolved Hide resolved
}
else {
u3_atom c, d, e, f, g;

c = u3i_word(b_w - a_w);
d = u3qc_rsh(0, c, b);

if ( c3n == u3r_sing(a, d) ) return u3m_bail(c3__exit);

e = u3qc_bex(c);
f = u3qa_dec(e);
g = u3qc_dis(b, f);
eamsden marked this conversation as resolved.
Show resolved Hide resolved

u3z(c);
u3z(d);
u3z(e);
u3z(f);

return g;
}
}

u3_noun
u3wc_hub(u3_noun cor)
{
u3_noun a, b;
if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0))
|| (0 == a)
|| (0 == b)
|| (c3n == u3ud(b))
|| (c3n == u3ud(a) && b != 1) )
{
return u3m_bail(c3__exit);
}
else {
return u3qc_hub(a, b);
}
}
69 changes: 35 additions & 34 deletions pkg/noun/jets/c/mas.c
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
/// @file

#include "jets/q.h"
#include "jets/w.h"

#include "noun.h"

u3_noun
u3qc_mas(u3_atom a)
{
c3_w b_w;
u3_atom c, d, e, f;

u3_noun
u3qc_mas(u3_atom a)
{
c3_w b_w;
u3_atom c, d, e, f;

b_w = u3r_met(0, a);
if ( b_w < 2 ) {
return u3m_bail(c3__exit);
}
else {
c = u3qc_bex((b_w - 1));
d = u3qc_bex((b_w - 2));
e = u3qa_sub(a, c);
f = u3qc_con(e, d);
b_w = u3r_met(0, a);
if ( b_w < 2 ) {
return u3m_bail(c3__exit);
}
else if ( c3y == u3a_is_cat(a) ) {
return (a - (1 << (b_w - 1))) | (1 << (b_w - 2));
}
else {
c = u3qc_bex(u3i_word(b_w - 1));
d = u3qc_bex(u3i_word(b_w - 2));
e = u3qa_sub(a, c);
f = u3qc_con(e, d);

u3z(c);
u3z(d);
u3z(e);
u3z(c);
u3z(d);
u3z(e);

return f;
}
return f;
}
u3_noun
u3wc_mas(u3_noun cor)
{
u3_noun a;
}

if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ||
(c3n == u3ud(a)) )
{
return u3m_bail(c3__exit);
} else {
return u3qc_mas(a);
}
}
u3_noun
u3wc_mas(u3_noun cor)
{
u3_noun a;

if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ||
(c3n == u3ud(a)) )
{
return u3m_bail(c3__exit);
}
else {
return u3qc_mas(a);
}
}
60 changes: 32 additions & 28 deletions pkg/noun/jets/c/peg.c
Original file line number Diff line number Diff line change
@@ -1,50 +1,54 @@
/// @file

#include "jets/q.h"
#include "jets/w.h"

#include "noun.h"

u3_noun
u3qc_peg(u3_atom a, u3_atom b)
{
if ( 1 == b ) {
return u3k(a);
}

u3_noun
u3qc_peg(u3_atom a,
u3_atom b)
{
if ( 1 == b ) {
return u3k(a);
}
c3_w c_w = u3r_met(0, b) - 1;

u3_atom c, d, e, f, g, h;
if ( (c3y == u3a_is_cat(a) && (c3y == u3a_is_cat(b))) ) {
c3_w d_w = b - (1 << c_w);
c3_d e_d = (c3_d)a << c_w;
return u3i_chub(d_w + e_d);
}
else {
u3_atom d, e, f, g, h;

c = u3r_met(0, b);
d = u3qa_dec(c);
d = u3i_word(c_w);
e = u3qc_lsh(0, d, 1);
f = u3qa_sub(b, e);
g = u3qc_lsh(0, d, a);
h = u3qa_add(f, g);

u3z(c);
u3z(d);
u3z(e);
u3z(f);
u3z(g);

return h;
}
u3_noun
u3wc_peg(u3_noun cor)
}

u3_noun
u3wc_peg(u3_noun cor)
{
u3_noun a, b;

if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
(0 == a) ||
(0 == b) ||
(c3n == u3ud(b)) ||
(c3n == u3ud(a) && b != 1) )
{
u3_noun a, b;

if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ||
(0 == a) ||
(0 == b) ||
(c3n == u3ud(b)) ||
(c3n == u3ud(a) && b != 1) )
{
return u3m_bail(c3__exit);
} else {
return u3qc_peg(a, b);
}
return u3m_bail(c3__exit);
}

else {
return u3qc_peg(a, b);
}
}
54 changes: 54 additions & 0 deletions pkg/noun/jets/c/pin.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include "jets/q.h"
#include "jets/w.h"

#include "noun.h"

u3_noun
u3qc_pin(u3_atom a, u3_atom b)
{
c3_w a_w, b_w, c_w;

if ( 1 == a ) return c3y;
if ( 1 == b ) return c3n;

a_w = u3r_met(0, a);
b_w = u3r_met(0, b);

if ( b_w < a_w ) return c3n;

c_w = b_w - a_w;

if ( (c3y == u3a_is_cat(a)) && (c3y == u3a_is_cat(b)) ) {
return __(a == (b >> (b_w - a_w)));
}
else {
u3_atom c, d, e;

c = u3i_word(b_w - a_w);
d = u3qc_rsh(0, c, b);
e = u3r_sing(a, d);

u3z(c);
u3z(d);

return e;
}
}

u3_noun
u3wc_pin(u3_noun cor)
{
u3_noun a, b;

if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0))
|| (0 == a)
|| (0 == b)
|| (c3n == u3ud(b))
|| (c3n == u3ud(a)) )
{
return u3m_bail(c3__exit);
}
else {
return u3qc_pin(a, b);
}
}
2 changes: 2 additions & 0 deletions pkg/noun/jets/q.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,15 @@
u3_noun u3qc_dvr(u3_atom, u3_atom);
u3_noun u3qc_end(u3_atom, u3_atom, u3_atom);
u3_noun u3qc_gor(u3_atom, u3_atom);
u3_noun u3qc_hub(u3_atom, u3_atom);
u3_noun u3qc_lsh(u3_atom, u3_atom, u3_atom);
u3_noun u3qc_mas(u3_atom);
u3_noun u3qc_met(u3_atom, u3_atom);
u3_noun u3qc_mix(u3_atom, u3_atom);
u3_noun u3qc_mor(u3_atom, u3_atom);
u3_noun u3qc_muk(u3_atom, u3_atom, u3_atom);
u3_noun u3qc_peg(u3_atom, u3_atom);
u3_noun u3qc_pin(u3_atom, u3_atom);
u3_noun u3qc_pow(u3_atom, u3_atom);
u3_noun u3qc_rap(u3_atom, u3_noun);
u3_noun u3qc_rep(u3_atom, u3_atom, u3_noun);
Expand Down
2 changes: 2 additions & 0 deletions pkg/noun/jets/w.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
u3_noun u3wc_dor(u3_noun);
u3_noun u3wc_dvr(u3_noun);
u3_noun u3wc_end(u3_noun);
u3_noun u3wc_hub(u3_noun);
u3_noun u3wc_gor(u3_noun);
u3_noun u3wc_lsh(u3_noun);
u3_noun u3wc_mas(u3_noun);
Expand All @@ -67,6 +68,7 @@
u3_noun u3wc_mug(u3_noun);
u3_noun u3wc_muk(u3_noun);
u3_noun u3wc_peg(u3_noun);
u3_noun u3wc_pin(u3_noun);
u3_noun u3wc_pow(u3_noun);
u3_noun u3wc_rap(u3_noun);
u3_noun u3wc_rep(u3_noun);
Expand Down