unsignedge(S,T) -> unsignedle(T,S)
unsignedgt(S,T) -> unsignedlt(T,S)
unsignedlt(S,0star) -> bit0
unsignedlt(S,S) -> bit0
add(S,0star) -> S
If(S,Bits(32,0star1),Bits(32,0star)) -> ZeroExt(S,31)
signedrshift(signedrshift(Bits(32,S),Bits(32,const26)),Bits(32,const5)) -> signedrshift(S,Bits(32,const31))
signedrshift(MASK=signedrshift(Bits(32,S),Bits(32,const31)),Bits(32,const5)) -> MASK
or(unsignedrshift(signedrshift(A,Bits(32,const26)),Bits(32,const5)),lshift(MASK=signedrshift(A,Bits(32,const31)),Bits(32,const27))) -> MASK
and(signedrshift(xor(and(xor(MINUS=sub(MAX=signedmax(Bits(32,A),Bits(32,B)),signedmin(A,B)),MAX),BXORA=xor(B,A)),MINUS),Bits(32,const31)),BXORA) -> 0star
invert(invert(S)) -> S
Reverse(Reverse(S)) -> S
xor(S,xor(S,T)) -> T
xor(xor(S,T),xor(S,U)) -> xor(T,U)
xor(S,xor(T,xor(S,U))) -> xor(T,U)
xor(S,xor(T,signedmax(S,T))) -> signedmin(S,T)
xor(S,xor(T,signedmin(S,T))) -> signedmax(S,T)
xor(xor(S,T),signedmax(S,T)) -> signedmin(S,T)
xor(xor(S,T),signedmin(S,T)) -> signedmax(S,T)
xor(xor(S,T),xor(U,signedmin(T,U))) -> xor(S,signedmax(T,U))
xor(xor(S,T),xor(U,signedmax(T,U))) -> xor(S,signedmin(T,U))
xor(S,xor(T,xor(U,signedmin(S,U)))) -> xor(T,signedmax(S,U))
xor(S,xor(T,xor(U,signedmax(S,U)))) -> xor(T,signedmin(S,U))
invert(Bits(32,0star)) -> Bits(32,1star)
invert(Bits(32,1star)) -> Bits(32,0star)
invert(Bits(64,0star)) -> Bits(64,1star)
invert(Bits(64,1star)) -> Bits(64,0star)
or(S,0star) -> S
and(S,C=0star) -> C
and(S,1star) -> S
xor(S,0star) -> S
xor(S,1star) -> invert(S)
equal(S,bit0) -> invert(S)
signedlt(S,S) -> bit0
signedlt(01star,S) -> bit0
signedmin(S,01star) -> S
signedmax(S,C=01star) -> C
signedmin(S,C=10star) -> C
signedmax(S,10star) -> S
If(bit0,S,T) -> T
If(S,bit1,bit0) -> S
If(signedle(S,T),S,T) -> signedmin(S,T)
If(signedlt(S,T),S,T) -> signedmin(S,T)
If(signedle(T,S),S,T) -> signedmax(S,T)
If(signedlt(T,S),S,T) -> signedmax(S,T)
signedmin(invert(S),invert(T)) -> invert(signedmax(S,T))
signedmax(invert(S),invert(T)) -> invert(signedmin(S,T))
signedlt(If(S,1star,0star),0star) -> S
signedrshift(X=If(S,1star,0star),T) -> X
Concat(X=If(S,1star,Bits(8,0star)),X,X,X) -> If(S,1star,0star)
Concat(X=If(S,1star,Bits(8,0star)),X,X,X,X,X,X,X) -> If(S,1star,0star)
Extract(Bits(32,A),31,0) -> A
Extract(Bits(64,A),63,0) -> A
Extract(Concat(Bits(64,A),Bits(64,B),Bits(64,C),Bits(64,D)),255,64) -> Concat(A,B,C)
Extract(Concat(Bits(64,A),Bits(64,B),Bits(64,C)),191,64) -> Concat(A,B)
Extract(Concat(Bits(64,A),Bits(64,B)),127,64) -> A
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A),63,0) -> Concat(A,A,A,A,A,A,A,A)
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B),127,64) -> Concat(A,A,A,A,A,A,A,A)
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B),63,0) -> Concat(B,B,B,B,B,B,B,B)
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C),63,0) -> Concat(C,C,C,C,C,C,C,C)
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C),127,64) -> Concat(B,B,B,B,B,B,B,B)
Extract(Concat(S,Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C),191,128) -> Concat(A,A,A,A,A,A,A,A)
Extract(Concat(Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),63,0) -> Concat(D,D,D,D,D,D,D,D)
Extract(Concat(Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),127,64) -> Concat(C,C,C,C,C,C,C,C)
Extract(Concat(Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),63,0) -> Concat(D,D,D,D,D,D,D,D)
Extract(Concat(Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),127,64) -> Concat(C,C,C,C,C,C,C,C)
Extract(Concat(Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),191,128) -> Concat(B,B,B,B,B,B,B,B)
Extract(Concat(Bits(8,A),A,A,A,A,A,A,A,Bits(8,B),B,B,B,B,B,B,B,Bits(8,C),C,C,C,C,C,C,C,Bits(8,D),D,D,D,D,D,D,D),255,192) -> Concat(A,A,A,A,A,A,A,A)
Extract(Concat(A,Bits(32,S),Bits(32,T)),63,0) -> Concat(S,T)
and(T,If(S,1star,C=0star)) -> If(S,T,C)
and(T,If(S,C=0star,1star)) -> If(S,C,T)
or(If(S,T,0star),If(S,0star,U)) -> If(S,T,U)
and(If(S,T,1star),If(S,1star,U)) -> If(S,T,U)
Concat(If(S,Extract(Bits(64,T),63,32),Extract(U,63,32)),If(S,Extract(T,31,0),Extract(U,31,0))) -> If(S,T,U)
If(signedlt(Bits(64,T),U),Extract(U,63,32),Extract(T,63,32)) -> Extract(signedmax(T,U),63,32)
If(signedlt(Bits(64,T),U),Extract(U,31,0),Extract(T,31,0)) -> Extract(signedmax(T,U),31,0)
Concat(Extract(Bits(64,T),63,32),Extract(T,31,0)) -> T
Concat(If(S,T,U),If(S,V,W)) -> If(S,Concat(T,V),Concat(U,W))
Concat(Bits(32,01star),Bits(32,1star)) -> 01star
invert(If(S,A=1star,Z=0star)) -> If(S,Z,A)
Extract(If(S,1star,0star),63,32) -> If(S,1star,0star)
Extract(If(S,1star,0star),31,0) -> If(S,1star,0star)
Extract(ZeroExt(Bits(32,S),32),31,0) -> S
Extract(ZeroExt(Bits(32,S),32),63,32) -> 0star
Extract(ZeroExt(Bits(32,S),64),31,0) -> S
Extract(ZeroExt(Bits(32,S),96),31,0) -> S
Extract(ZeroExt(Bits(32,S),96),63,32) -> 0star
Extract(ZeroExt(Bits(32,S),96),63,0) -> ZeroExt(S,32)
Extract(ZeroExt(Bits(64,S),64),31,0) -> Extract(S,31,0)
Extract(ZeroExt(Bits(64,S),64),63,32) -> Extract(S,63,32)
Extract(ZeroExt(Bits(64,S),64),63,0) -> S
Extract(ZeroExt(Bits(64,S),192),63,0) -> S
Extract(ZeroExt(Bits(64,S),64),95,64) -> 0star
Extract(ZeroExt(Bits(64,S),64),127,96) -> 0star
Extract(ZeroExt(Bits(64,S),64),127,64) -> 0star
Extract(ZeroExt(Bits(64,S),192),127,64) -> 0star
Extract(ZeroExt(Bits(64,S),192),191,128) -> 0star
Extract(ZeroExt(Bits(64,S),192),255,192) -> 0star
Extract(ZeroExt(Bits(96,S),32),95,64) -> Extract(S,95,64)
Extract(ZeroExt(Bits(96,S),32),63,32) -> Extract(S,63,32)
Extract(ZeroExt(Bits(96,S),32),31,0) -> Extract(S,31,0)
Extract(or(S,T),31,0) -> or(Extract(S,31,0),Extract(T,31,0))
Extract(or(S,T),63,32) -> or(Extract(S,63,32),Extract(T,63,32))
Extract(or(S,T),95,64) -> or(Extract(S,95,64),Extract(T,95,64))
Extract(or(S,T),127,96) -> or(Extract(S,127,96),Extract(T,127,96))
Extract(or(S,T),159,128) -> or(Extract(S,159,128),Extract(T,159,128))
Extract(or(S,T),191,160) -> or(Extract(S,191,160),Extract(T,191,160))
Extract(or(S,T),223,192) -> or(Extract(S,223,192),Extract(T,223,192))
Extract(or(S,T),255,224) -> or(Extract(S,255,224),Extract(T,255,224))
Extract(and(S,T),31,0) -> and(Extract(S,31,0),Extract(T,31,0))
Extract(and(S,T),63,32) -> and(Extract(S,63,32),Extract(T,63,32))
Extract(and(S,T),95,64) -> and(Extract(S,95,64),Extract(T,95,64))
Extract(and(S,T),127,96) -> and(Extract(S,127,96),Extract(T,127,96))
Extract(and(S,T),159,128) -> and(Extract(S,159,128),Extract(T,159,128))
Extract(and(S,T),191,160) -> and(Extract(S,191,160),Extract(T,191,160))
Extract(and(S,T),223,192) -> and(Extract(S,223,192),Extract(T,223,192))
Extract(and(S,T),255,224) -> and(Extract(S,255,224),Extract(T,255,224))
Extract(xor(S,T),31,0) -> xor(Extract(S,31,0),Extract(T,31,0))
Extract(xor(S,T),63,32) -> xor(Extract(S,63,32),Extract(T,63,32))
Extract(xor(S,T),95,64) -> xor(Extract(S,95,64),Extract(T,95,64))
Extract(xor(S,T),127,96) -> xor(Extract(S,127,96),Extract(T,127,96))
Extract(xor(S,T),159,128) -> xor(Extract(S,159,128),Extract(T,159,128))
Extract(xor(S,T),191,160) -> xor(Extract(S,191,160),Extract(T,191,160))
Extract(xor(S,T),223,192) -> xor(Extract(S,223,192),Extract(T,223,192))
Extract(xor(S,T),255,224) -> xor(Extract(S,255,224),Extract(T,255,224))
Extract(or(S,T),63,0) -> or(Extract(S,63,0),Extract(T,63,0))
Extract(or(S,T),127,64) -> or(Extract(S,127,64),Extract(T,127,64))
Extract(or(S,T),191,128) -> or(Extract(S,191,128),Extract(T,191,128))
Extract(or(S,T),255,192) -> or(Extract(S,255,192),Extract(T,255,192))
Extract(and(S,T),63,0) -> and(Extract(S,63,0),Extract(T,63,0))
Extract(and(S,T),127,64) -> and(Extract(S,127,64),Extract(T,127,64))
Extract(and(S,T),191,128) -> and(Extract(S,191,128),Extract(T,191,128))
Extract(and(S,T),255,192) -> and(Extract(S,255,192),Extract(T,255,192))
Extract(xor(S,T),63,0) -> xor(Extract(S,63,0),Extract(T,63,0))
Extract(xor(S,T),127,64) -> xor(Extract(S,127,64),Extract(T,127,64))
Extract(xor(S,T),191,128) -> xor(Extract(S,191,128),Extract(T,191,128))
Extract(xor(S,T),255,192) -> xor(Extract(S,255,192),Extract(T,255,192))
Extract(or(S,T),127,0) -> or(Extract(S,127,0),Extract(T,127,0))
Extract(or(S,T),255,128) -> or(Extract(S,255,128),Extract(T,255,128))
Extract(and(S,T),127,0) -> and(Extract(S,127,0),Extract(T,127,0))
Extract(and(S,T),255,128) -> and(Extract(S,255,128),Extract(T,255,128))
xor(ZeroExt(C,31),Bits(32,0star1)) -> ZeroExt(invert(C),31)
invert(unsignedle(S,T)) -> unsignedlt(T,S)
sub(sub(Extract(Bits(64,B),63,32),Extract(Bits(64,A),63,32)),ZeroExt(unsignedlt(Extract(B,31,0),Extract(A,31,0)),31)) -> Extract(sub(B,A),63,32)
and(signedrshift(xor(BMINUSATOP=Extract(sub(Bits(64,B),Bits(64,A)),63,32),and(xor(BTOP=Extract(B,63,32),BMINUSATOP),BXORATOP=xor(ATOP=Extract(A,63,32),BTOP))),Bits(32,const31)),BXORATOP) -> xor(ATOP,Extract(signedmin(A,B),63,32))
and(signedrshift(xor(BMINUSATOP=Extract(sub(Bits(64,B),Bits(64,A)),63,32),and(xor(BTOP=Extract(B,63,32),BMINUSATOP),xor(Extract(A,63,32),BTOP))),Bits(32,const31)),xor(ABOT=Extract(A,31,0),Extract(B,31,0))) -> xor(ABOT,Extract(signedmin(A,B),31,0))
xor(Extract(B,31,0),xor(Extract(A,31,0),Extract(signedmin(A,B),31,0))) -> Extract(signedmax(A,B),31,0)
xor(Extract(B,63,32),xor(Extract(A,63,32),Extract(signedmin(A,B),63,32))) -> Extract(signedmax(A,B),63,32)
xor(xor(Extract(Bits(64,S),63,32),xor(Extract(signedmax(T,S),63,32),Extract(X,63,32))),Extract(T,63,32)) -> xor(Extract(X,63,32),Extract(signedmin(T,S),63,32))
xor(and(signedrshift(xor(BMINUSA=sub(B,A),and(xor(B,BMINUSA),AXORB=xor(A,B))),Bits(32,const31)),AXORB),A) -> signedmin(A,B)
xor(and(signedrshift(xor(BMINUSA=sub(B,A),and(xor(B,BMINUSA),AXORB=xor(A,B))),Bits(32,const31)),AXORB),B) -> signedmax(A,B)
and(signedrshift(xor(BMINUSATOP=Extract(sub(Bits(64,signedmax(A,B)),Bits(64,signedmin(A,B))),63,32),and(xor(BTOP=Extract(signedmax(A,B),63,32),BMINUSATOP),BAORATOP=xor(ATOP=Extract(signedmin(A,B),63,32),BTOP))),Bits(32,const31)),BAORATOP) -> xor(ATOP,Extract(signedmin(A,B),63,32))
and(signedrshift(xor(BMINUSATOP=Extract(sub(Bits(64,signedmax(A,B)),Bits(64,signedmin(A,B))),63,32),and(xor(BTOP=Extract(signedmax(A,B),63,32),BMINUSATOP),xor(Extract(signedmin(A,B),63,32),BTOP))),Bits(32,const31)),xor(ABOT=Extract(signedmin(A,B),31,0),Extract(signedmax(A,B),31,0))) -> xor(ABOT,Extract(signedmin(A,B),31,0))
signedrshift(xor(MINUSTOP=Extract(sub(MAX=signedmax(Bits(64,A),Bits(64,B)),signedmin(A,B)),63,32),and(xor(Extract(MAX,63,32),MINUSTOP),xor(Extract(A,63,32),Extract(B,63,32)))),Bits(32,const31)) -> 0star
xor(S,S) -> 0star
xor(invert(S),invert(T)) -> xor(S,T)
xor(invert(S),T) -> invert(xor(S,T))
signedlt(invert(S),invert(T)) -> signedlt(T,S)
xor(10star,If(signedlt(S,T),xor(S,10star),1star)) -> If(signedlt(S,T),S,01star)
If(C,invert(S),0star) -> invert(If(C,S,1star))
If(C,0star,invert(S)) -> invert(If(C,1star,S))
If(C,invert(S),invert(T)) -> invert(If(C,S,T))
If(signedlt(S,T),0star,xor(S,T)) -> xor(S,signedmin(S,T))
If(signedlt(S,T),xor(S,T),0star) -> xor(S,signedmax(S,T))
If(signedlt(S,01star),0star,invert(xor(S,10star))) -> 0star
If(signedlt(S,01star),xor(S,10star),1star) -> xor(S,10star)
or(invert(S),invert(T)) -> invert(and(S,T))
xor(S,If(C,1star,xor(S,10star))) -> If(C,xor(S,1star),10star)
invert(If(C,invert(S),10star)) -> If(C,S,01star)
