summaryrefslogtreecommitdiff
path: root/source/luametatex/source/tex/texconditional.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/tex/texconditional.c')
-rw-r--r--source/luametatex/source/tex/texconditional.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texconditional.c b/source/luametatex/source/tex/texconditional.c
index 40c704492..b2219e2ab 100644
--- a/source/luametatex/source/tex/texconditional.c
+++ b/source/luametatex/source/tex/texconditional.c
@@ -578,6 +578,36 @@ void tex_conditional_if(halfword code, int unless)
case if_zero_int_code:
result = tex_scan_int(0, NULL) == 0;
goto RESULT;
+ case if_abs_posit_code:
+ case if_posit_code:
+ {
+ halfword n1 = tex_scan_posit(0);
+ halfword cp = tex_aux_scan_comparison(code);
+ halfword n2 = tex_scan_posit(0);
+ if (code == if_abs_posit_code) {
+ tex_posit zero = tex_integer_to_posit(0);
+ if (tex_posit_lt(n1,zero.v)) {
+ n1 = tex_posit_neg(n1);
+ }
+ if (tex_posit_lt(n2,zero.v)) {
+ n2 = tex_posit_neg(n2);
+ }
+ }
+ switch (cp) {
+ case 0: result = tex_posit_eq(n1,n2); break;
+ case 1: result = tex_posit_lt(n1,n2); break;
+ case 2: result = tex_posit_gt(n1,n2); break;
+ case 3: result = tex_posit_ne(n1,n2); break;
+ case 4: result = tex_posit_gt(n1,n2); break;
+ case 5: result = tex_posit_lt(n1,n2); break;
+ case 6: result = tex_posit_eq(tex_integer_to_posit(tex_posit_to_integer(n1) & tex_posit_to_integer(n2)).v,n1); break;
+ case 7: result = tex_posit_ne(tex_integer_to_posit(tex_posit_to_integer(n1) & tex_posit_to_integer(n2)).v,n1); break;
+ }
+ }
+ goto RESULT;
+ case if_zero_posit_code:
+ result = tex_posit_eq_zero(tex_scan_posit(0));
+ goto RESULT;
case if_abs_dim_code:
case if_dim_code:
{