Skip to content

Commit

Permalink
u3: further optimizes +peg jet
Browse files Browse the repository at this point in the history
  • Loading branch information
joemfb committed Oct 13, 2023
1 parent 2d696e3 commit de74b25
Showing 1 changed file with 31 additions and 19 deletions.
50 changes: 31 additions & 19 deletions pkg/noun/jets/c/peg.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,47 @@
u3_noun
u3qc_peg(u3_atom a, u3_atom b)
{
if ( 1 == b ) {
if ( (0 == a) || (0 == b) ) {
return u3m_bail(c3__exit);
}
else if ( 1 == b ) {
return u3k(a);
}

c3_w c_w = u3r_met(0, b) - 1;
c3_d a_d, b_d;
c3_w c_w;

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);
if ( (c3y == u3a_is_cat(a)) && (c3y == u3a_is_cat(b)) ) {
c_w = c3_bits_word(b) - 1;
a_d = a;
b_d = b;
}
else {
u3_atom d, e, f, g, h;
c3_w d_w = u3r_met(0, a);
c3_d e_d;

c_w = u3r_met(0, b) - 1;
e_d = (c3_d)c_w + d_w;

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);
if ( 64 <= e_d ) {
u3i_slab sab_u;
u3i_slab_init(&sab_u, 0, e_d);

u3z(d);
u3z(e);
u3z(f);
u3z(g);
u3r_chop(0, 0, c_w, 0, sab_u.buf_w, b);
u3r_chop(0, 0, d_w, c_w, sab_u.buf_w, a);

return h;
return u3i_slab_moot(&sab_u);
}

a_d = u3r_chub(0, a);
b_d = u3r_chub(0, b);
}

b_d &= ((c3_d)1 << c_w) - 1;
a_d <<= c_w;
a_d ^= b_d;

return u3i_chub(a_d);
}

u3_noun
Expand All @@ -41,8 +55,6 @@ 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) )
{
Expand Down

0 comments on commit de74b25

Please sign in to comment.