mirror of
https://github.com/urbit/shrub.git
synced 2024-11-28 05:22:27 +03:00
++rs jets
This commit is contained in:
parent
05e6a96bd5
commit
6fabd7c565
1
Makefile
1
Makefile
@ -211,6 +211,7 @@ J_E_OFILES=\
|
||||
jets/e/mule.o \
|
||||
jets/e/parse.o \
|
||||
jets/e/rd.o \
|
||||
jets/e/rs.o \
|
||||
jets/e/repg.o \
|
||||
jets/e/rexp.o \
|
||||
jets/e/rub.o \
|
||||
|
@ -122,6 +122,18 @@
|
||||
u3_noun u3qer_gte(u3_atom, u3_atom);
|
||||
u3_noun u3qer_gth(u3_atom, u3_atom);
|
||||
|
||||
u3_noun u3qet_add(u3_atom, u3_atom);
|
||||
u3_noun u3qet_sub(u3_atom, u3_atom);
|
||||
u3_noun u3qet_mul(u3_atom, u3_atom);
|
||||
u3_noun u3qet_div(u3_atom, u3_atom);
|
||||
u3_noun u3qet_sqt(u3_atom);
|
||||
u3_noun u3qet_fma(u3_atom, u3_atom, u3_atom);
|
||||
u3_noun u3qet_lth(u3_atom, u3_atom);
|
||||
u3_noun u3qet_lte(u3_atom, u3_atom);
|
||||
u3_noun u3qet_equ(u3_atom, u3_atom);
|
||||
u3_noun u3qet_gte(u3_atom, u3_atom);
|
||||
u3_noun u3qet_gth(u3_atom, u3_atom);
|
||||
|
||||
|
||||
/** Tier 6.
|
||||
**/
|
||||
|
@ -151,6 +151,18 @@
|
||||
u3_noun u3wer_gte(u3_noun);
|
||||
u3_noun u3wer_gth(u3_noun);
|
||||
|
||||
u3_noun u3wet_add(u3_noun);
|
||||
u3_noun u3wet_sub(u3_noun);
|
||||
u3_noun u3wet_mul(u3_noun);
|
||||
u3_noun u3wet_div(u3_noun);
|
||||
u3_noun u3wet_sqt(u3_noun);
|
||||
u3_noun u3wet_fma(u3_noun);
|
||||
u3_noun u3wet_lth(u3_noun);
|
||||
u3_noun u3wet_lte(u3_noun);
|
||||
u3_noun u3wet_equ(u3_noun);
|
||||
u3_noun u3wet_gte(u3_noun);
|
||||
u3_noun u3wet_gth(u3_noun);
|
||||
|
||||
|
||||
/** Tier 6.
|
||||
**/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* j/5/aes.c
|
||||
/* j/e/rd.c
|
||||
**
|
||||
*/
|
||||
#include "all.h"
|
||||
|
172
jets/e/rs.c
172
jets/e/rs.c
@ -1,26 +1,26 @@
|
||||
/* j/e/rd.c
|
||||
/* j/e/rs.c
|
||||
**
|
||||
*/
|
||||
#include "all.h"
|
||||
#include <math.h>
|
||||
#include "softfloat.h"
|
||||
|
||||
#define SINGNAN 0x7fc00000
|
||||
|
||||
union sing {
|
||||
float d;
|
||||
c3_w c;
|
||||
};
|
||||
union sing {
|
||||
float32_t s;
|
||||
c3_w c;
|
||||
};
|
||||
|
||||
/* functions
|
||||
*/
|
||||
static inline c3_t
|
||||
_nan_test(float a)
|
||||
_nan_test(float32_t a)
|
||||
{
|
||||
return !(a == a);
|
||||
return !f32_eq(a, a);
|
||||
}
|
||||
|
||||
static inline float
|
||||
_nan_unify(float a)
|
||||
static inline float32_t
|
||||
_nan_unify(float32_t a)
|
||||
{
|
||||
if (_nan_test(a))
|
||||
{
|
||||
@ -32,19 +32,18 @@ union sing {
|
||||
/* add
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_add(u3_atom a, u3_atom b)
|
||||
u3qet_add(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d, e;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
e.d = c.d + d.d;
|
||||
e.d = _nan_unify(e.d);
|
||||
e.s = _nan_unify(f32_add(c.s, d.s));
|
||||
|
||||
return u3i_words(1, &e.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_add(u3_noun cor)
|
||||
u3wet_add(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -55,26 +54,25 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_add(a, b);
|
||||
return u3qet_add(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* sub
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_sub(u3_atom a, u3_atom b)
|
||||
u3qet_sub(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d, e;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
e.d = c.d - d.d;
|
||||
e.d = _nan_unify(e.d);
|
||||
e.s = _nan_unify(f32_sub(c.s, d.s));
|
||||
|
||||
return u3i_words(1, &e.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_sub(u3_noun cor)
|
||||
u3wet_sub(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -85,26 +83,25 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_sub(a, b);
|
||||
return u3qet_sub(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* mul
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_mul(u3_atom a, u3_atom b)
|
||||
u3qet_mul(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d, e;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
e.d = c.d * d.d;
|
||||
e.d = _nan_unify(e.d);
|
||||
e.s = _nan_unify(f32_mul(c.s, d.s));
|
||||
|
||||
return u3i_words(1, &e.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_mul(u3_noun cor)
|
||||
u3wet_mul(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -115,26 +112,25 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_mul(a, b);
|
||||
return u3qet_mul(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* div
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_div(u3_atom a, u3_atom b)
|
||||
u3qet_div(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d, e;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
e.d = c.d / d.d;
|
||||
e.d = _nan_unify(e.d);
|
||||
e.s = _nan_unify(f32_div(c.s, d.s));
|
||||
|
||||
return u3i_words(1, &e.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_div(u3_noun cor)
|
||||
u3wet_div(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -145,25 +141,24 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_div(a, b);
|
||||
return u3qet_div(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* sqt
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_sqt(u3_atom a)
|
||||
u3qet_sqt(u3_atom a)
|
||||
{
|
||||
union sing b, c;
|
||||
b.c = u3r_word(0, a);
|
||||
c.d = sqrt(b.d);
|
||||
c.d = _nan_unify(c.d);
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.s = _nan_unify(f32_sqrt(c.s));
|
||||
|
||||
return u3i_words(1, &c.c);
|
||||
return u3i_words(1, &d.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_sqt(u3_noun cor)
|
||||
u3wet_sqt(u3_noun cor)
|
||||
{
|
||||
u3_noun a;
|
||||
|
||||
@ -173,30 +168,55 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_sqt(a);
|
||||
return u3qet_sqt(a);
|
||||
}
|
||||
}
|
||||
|
||||
/* fma
|
||||
*/
|
||||
u3_noun
|
||||
u3qet_fma(u3_atom a, u3_atom b, u3_atom c)
|
||||
{
|
||||
union sing d, e, f, g;
|
||||
d.c = u3r_word(0, a);
|
||||
e.c = u3r_word(0, b);
|
||||
f.c = u3r_word(0, c);
|
||||
g.s = _nan_unify(f32_mulAdd(d.s, e.s, f.s));
|
||||
|
||||
return u3i_words(1, &g.c);
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wet_fma(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b, c;
|
||||
|
||||
if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &b, u3x_sam_7, &c, 0) ||
|
||||
c3n == u3ud(a) ||
|
||||
c3n == u3ud(b) ||
|
||||
c3n == u3ud(c) )
|
||||
{
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qet_fma(a, b, c);
|
||||
}
|
||||
}
|
||||
|
||||
/* lth
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_lth(u3_atom a, u3_atom b)
|
||||
u3qet_lth(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
|
||||
if (_nan_test(c.d) || _nan_test(d.d))
|
||||
{
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
return u3nc(u3_nul, __(c.d < d.d));
|
||||
}
|
||||
return __(f32_lt(c.s, d.s));
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_lth(u3_noun cor)
|
||||
u3wet_lth(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -207,30 +227,24 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_lth(a, b);
|
||||
return u3qet_lth(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* lte
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_lte(u3_atom a, u3_atom b)
|
||||
u3qet_lte(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
|
||||
if (_nan_test(c.d) || _nan_test(d.d))
|
||||
{
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
return u3nc(u3_nul, __(c.d <= d.d));
|
||||
}
|
||||
return __(f32_le(c.s, d.s));
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_lte(u3_noun cor)
|
||||
u3wet_lte(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -241,30 +255,24 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_lte(a, b);
|
||||
return u3qet_lte(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* equ
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_equ(u3_atom a, u3_atom b)
|
||||
u3qet_equ(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
|
||||
if (_nan_test(c.d) || _nan_test(d.d))
|
||||
{
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
return u3nc(u3_nul, __(c.d == d.d));
|
||||
}
|
||||
return __(f32_eq(c.s, d.s));
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_equ(u3_noun cor)
|
||||
u3wet_equ(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -275,30 +283,24 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_equ(a, b);
|
||||
return u3qet_equ(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* gte
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_gte(u3_atom a, u3_atom b)
|
||||
u3qet_gte(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
|
||||
if (_nan_test(c.d) || _nan_test(d.d))
|
||||
{
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
return u3nc(u3_nul, __(c.d >= d.d));
|
||||
}
|
||||
return __(f32_le(d.s, c.s));
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_gte(u3_noun cor)
|
||||
u3wet_gte(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -309,30 +311,24 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_gte(a, b);
|
||||
return u3qet_gte(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
/* gth
|
||||
*/
|
||||
u3_noun
|
||||
u3qef_gth(u3_atom a, u3_atom b)
|
||||
u3qet_gth(u3_atom a, u3_atom b)
|
||||
{
|
||||
union sing c, d;
|
||||
c.c = u3r_word(0, a);
|
||||
d.c = u3r_word(0, b);
|
||||
|
||||
if (_nan_test(c.d) || _nan_test(d.d))
|
||||
{
|
||||
return u3_nul;
|
||||
}
|
||||
else {
|
||||
return u3nc(u3_nul, __(c.d > d.d));
|
||||
}
|
||||
return __(f32_lt(d.s, c.s));
|
||||
}
|
||||
|
||||
u3_noun
|
||||
u3wef_gth(u3_noun cor)
|
||||
u3wet_gth(u3_noun cor)
|
||||
{
|
||||
u3_noun a, b;
|
||||
|
||||
@ -343,6 +339,6 @@ union sing {
|
||||
return u3m_bail(c3__exit);
|
||||
}
|
||||
else {
|
||||
return u3qef_gth(a, b);
|
||||
return u3qet_gth(a, b);
|
||||
}
|
||||
}
|
||||
|
30
jets/tree.c
30
jets/tree.c
@ -229,6 +229,32 @@ static u3j_core _mood__hoon__rd_d[] =
|
||||
{}
|
||||
};
|
||||
|
||||
static u3j_harm _mood__hoon__rs_add_a[] = {{".2", u3wet_add}, {}};
|
||||
static u3j_harm _mood__hoon__rs_sub_a[] = {{".2", u3wet_sub}, {}};
|
||||
static u3j_harm _mood__hoon__rs_mul_a[] = {{".2", u3wet_mul}, {}};
|
||||
static u3j_harm _mood__hoon__rs_div_a[] = {{".2", u3wet_div}, {}};
|
||||
static u3j_harm _mood__hoon__rs_sqt_a[] = {{".2", u3wet_sqt}, {}};
|
||||
static u3j_harm _mood__hoon__rs_fma_a[] = {{".2", u3wet_fma}, {}};
|
||||
static u3j_harm _mood__hoon__rs_lth_a[] = {{".2", u3wet_lth}, {}};
|
||||
static u3j_harm _mood__hoon__rs_lte_a[] = {{".2", u3wet_lte}, {}};
|
||||
static u3j_harm _mood__hoon__rs_equ_a[] = {{".2", u3wet_equ}, {}};
|
||||
static u3j_harm _mood__hoon__rs_gte_a[] = {{".2", u3wet_gte}, {}};
|
||||
static u3j_harm _mood__hoon__rs_gth_a[] = {{".2", u3wet_gth}, {}};
|
||||
static u3j_core _mood__hoon__rs_d[] =
|
||||
{ { "add", _mood__hoon__rs_add_a },
|
||||
{ "sub", _mood__hoon__rs_sub_a },
|
||||
{ "mul", _mood__hoon__rs_mul_a },
|
||||
{ "div", _mood__hoon__rs_div_a },
|
||||
{ "sqt", _mood__hoon__rs_sqt_a },
|
||||
{ "fma", _mood__hoon__rs_fma_a },
|
||||
{ "lth", _mood__hoon__rs_lth_a },
|
||||
{ "lte", _mood__hoon__rs_lte_a },
|
||||
{ "equ", _mood__hoon__rs_equ_a },
|
||||
{ "gte", _mood__hoon__rs_gte_a },
|
||||
{ "gth", _mood__hoon__rs_gth_a },
|
||||
{}
|
||||
};
|
||||
|
||||
static u3j_harm _mood__hoon__coed__ed_puck_a[] = {{".2", u3wee_puck}, {}};
|
||||
static u3j_harm _mood__hoon__coed__ed_sign_a[] = {{".2", u3wee_sign}, {}};
|
||||
static u3j_harm _mood__hoon__coed__ed_veri_a[] = {{".2", u3wee_veri}, {}};
|
||||
@ -454,10 +480,10 @@ static u3j_core _mood__hoon_d[] =
|
||||
{ "stew", 0, _mood__hoon__stew_d },
|
||||
{ "stir", 0, _mood__hoon__stir_d },
|
||||
|
||||
{ "og", 0, _mood__hoon__og_d },
|
||||
{ "rd", 0, _mood__hoon__rd_d },
|
||||
{ "rs", 0, _mood__hoon__rs_d },
|
||||
{ "og", 0, _mood__hoon__og_d },
|
||||
{ "coed", 0, _mood__hoon__coed_d },
|
||||
|
||||
{ "scr", 0, _mood__hoon__scr_d },
|
||||
|
||||
{ "pfix", _mood__hoon_pfix_a },
|
||||
|
Loading…
Reference in New Issue
Block a user