mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-12 15:01:38 +03:00
u3: adds bitwidth shortcircuit to atom comparison jets
This commit is contained in:
parent
b706e7b58c
commit
91b79dc8d9
@ -10,18 +10,26 @@ u3qa_gte(u3_atom a, u3_atom b)
|
||||
return __(a >= b);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
c3_w a_w = u3r_met(0, a);
|
||||
c3_w b_w = u3r_met(0, b);
|
||||
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
if ( a_w != b_w ) {
|
||||
return __(a_w >= b_w);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
|
||||
cmp = (mpz_cmp(a_mp, b_mp) >= 0) ? c3y : c3n;
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
cmp = (mpz_cmp(a_mp, b_mp) >= 0) ? c3y : c3n;
|
||||
|
||||
return cmp;
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
|
||||
return cmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,18 +10,26 @@ u3qa_gth(u3_atom a, u3_atom b)
|
||||
return __(a > b);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
c3_w a_w = u3r_met(0, a);
|
||||
c3_w b_w = u3r_met(0, b);
|
||||
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
if ( a_w != b_w ) {
|
||||
return __(a_w > b_w);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
|
||||
cmp = (mpz_cmp(a_mp, b_mp) > 0) ? c3y : c3n;
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
cmp = (mpz_cmp(a_mp, b_mp) > 0) ? c3y : c3n;
|
||||
|
||||
return cmp;
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
|
||||
return cmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,18 +10,26 @@ u3qa_lte(u3_atom a, u3_atom b)
|
||||
return __(a <= b);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
c3_w a_w = u3r_met(0, a);
|
||||
c3_w b_w = u3r_met(0, b);
|
||||
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
if ( a_w != b_w ) {
|
||||
return __(a_w <= b_w);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
|
||||
cmp = (mpz_cmp(a_mp, b_mp) <= 0) ? c3y : c3n;
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
cmp = (mpz_cmp(a_mp, b_mp) <= 0) ? c3y : c3n;
|
||||
|
||||
return cmp;
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
|
||||
return cmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,18 +16,26 @@ u3qa_lth(u3_atom a, u3_atom b)
|
||||
return c3n;
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
c3_w a_w = u3r_met(0, a);
|
||||
c3_w b_w = u3r_met(0, b);
|
||||
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
if ( a_w != b_w ) {
|
||||
return __(a_w < b_w);
|
||||
}
|
||||
else {
|
||||
mpz_t a_mp, b_mp;
|
||||
u3_noun cmp;
|
||||
|
||||
cmp = (mpz_cmp(a_mp, b_mp) < 0) ? c3y : c3n;
|
||||
u3r_mp(a_mp, a);
|
||||
u3r_mp(b_mp, b);
|
||||
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
cmp = (mpz_cmp(a_mp, b_mp) < 0) ? c3y : c3n;
|
||||
|
||||
return cmp;
|
||||
mpz_clear(a_mp);
|
||||
mpz_clear(b_mp);
|
||||
|
||||
return cmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user