]> Repositorios git - scryer-prolog.git/commitdiff
FIXED: use lsb/2 and msb/2 from library(arithmetic)
authorMarkus Triska <[email protected]>
Sat, 28 Jan 2023 08:42:26 +0000 (09:42 +0100)
committerMarkus Triska <[email protected]>
Sat, 28 Jan 2023 16:37:43 +0000 (17:37 +0100)
This addresses #1720.

src/lib/clpz.pl

index 04ba0a7909a523c1c03afc7b7f313291dc80d5b2..14a790fc01937bea50d2ea02e376e459130d4dc5 100644 (file)
@@ -2962,8 +2962,8 @@ expr_conds(A0>>B0, A>>B) --> expr_conds(A0, A), expr_conds(B0, B).
 expr_conds(A0/\B0, A/\B) --> expr_conds(A0, A), expr_conds(B0, B).
 expr_conds(A0\/B0, A\/B) --> expr_conds(A0, A), expr_conds(B0, B).
 expr_conds(xor(A0,B0), xor(A,B)) --> expr_conds(A0, A), expr_conds(B0, B).
-expr_conds(lsb(A0), lsb(A)) --> expr_conds(A0, A).
-expr_conds(msb(A0), msb(A)) --> expr_conds(A0, A).
+expr_conds(lsb(A0), lsb(A)) --> expr_conds(A0, A).
+expr_conds(msb(A0), msb(A)) --> expr_conds(A0, A).
 expr_conds(popcount(A0), Count) -->
         expr_conds(A0, A),
         [I is A, arithmetic:popcount(I, Count)].
@@ -3539,8 +3539,8 @@ parse_reified(E, R, D,
                m(A^B)        => [d(D), p(pexp(A,B,R)), a(A,B,R)],
                % bitwise operations
                m(\A)         => [function(D,\,A,R)],
-               m(msb(A))     => [function(D,msb,A,R)],
-               m(lsb(A))     => [function(D,lsb,A,R)],
+               m(msb(A))     => [g(#A#>0) ,function(D,msb,A,R)],
+               m(lsb(A))     => [g(#A#>0), function(D,lsb,A,R)],
                m(popcount(A)) => [function(D,popcount,A,R)],
                m(sign(A))    => [function(D,sign,A,R)],
                m(A<<B)       => [function(D,<<,A,B,R)],
@@ -5683,8 +5683,11 @@ run_propagator(pfunction(Op,A,B,R), MState) -->
 run_propagator(pfunction(Op,A,R), MState) -->
         (   integer(A) ->
             kill(MState),
-            Expr =.. [Op,A],
-            R is Expr
+            (   Op == msb -> { msb(A, R) }
+            ;   Op == lsb -> { lsb(A, R) }
+            ;   Expr =.. [Op,A],
+                R is Expr
+            )
         ;   []
         ).