Skip to content

Commit

Permalink
Refactor expression package & remove IConst interface (#606)
Browse files Browse the repository at this point in the history
ThomasHaas authored Jan 22, 2024
1 parent 24cf37b commit 77bc93b
Showing 85 changed files with 931 additions and 1,082 deletions.
40 changes: 20 additions & 20 deletions dartagnan/src/main/antlr4/LitmusAArch64.g4
Original file line number Diff line number Diff line change
@@ -151,30 +151,30 @@ storeExclusiveInstruction locals [String mo]
| STLXR {$mo = MO_REL;}
;

arithmeticInstruction locals [IOpBin op]
: ADD { $op = IOpBin.ADD; }
arithmeticInstruction locals [IntBinaryOp op]
: ADD { $op = IntBinaryOp.ADD; }
// | ADDS { throw new RuntimeException("Instruction ADDS is not implemented"); }
| SUB { $op = IOpBin.SUB; }
| SUB { $op = IntBinaryOp.SUB; }
// | SUBS { throw new RuntimeException("Instruction SUBS is not implemented"); }
// | ADC { throw new RuntimeException("Instruction ADC is not implemented"); }
// | ADCS { throw new RuntimeException("Instruction ADCS is not implemented"); }
// | SBC { throw new RuntimeException("Instruction SBC is not implemented"); }
// | SBCS { throw new RuntimeException("Instruction SBCS is not implemented"); }
| AND { $op = IOpBin.AND; }
| ORR { $op = IOpBin.OR; }
| EOR { $op = IOpBin.XOR; }
| AND { $op = IntBinaryOp.AND; }
| ORR { $op = IntBinaryOp.OR; }
| EOR { $op = IntBinaryOp.XOR; }
// | BIC { throw new RuntimeException("Instruction BIC is not implemented"); }
// | ORN { throw new RuntimeException("Instruction ORN is not implemented"); }
// | EON { throw new RuntimeException("Instruction EON is not implemented"); }
;

branchCondition returns [COpBin op]
: EQ {$op = COpBin.EQ;}
| NE {$op = COpBin.NEQ;}
| GE {$op = COpBin.GTE;}
| LE {$op = COpBin.LTE;}
| GT {$op = COpBin.GT;}
| LT {$op = COpBin.LT;}
branchCondition returns [CmpOp op]
: EQ {$op = CmpOp.EQ;}
| NE {$op = CmpOp.NEQ;}
| GE {$op = CmpOp.GTE;}
| LE {$op = CmpOp.LTE;}
| GT {$op = CmpOp.GT;}
| LT {$op = CmpOp.LT;}
// | CS
// | HS
// | CC
@@ -188,15 +188,15 @@ branchCondition returns [COpBin op]
// | AL
;

branchRegInstruction returns [COpBin op]
: CBZ {$op = COpBin.EQ;}
| CBNZ {$op = COpBin.NEQ;}
branchRegInstruction returns [CmpOp op]
: CBZ {$op = CmpOp.EQ;}
| CBNZ {$op = CmpOp.NEQ;}
;

shiftOperator returns [IOpBin op]
: LSL { $op = IOpBin.LSHIFT; }
| LSR { $op = IOpBin.RSHIFT; }
| ASR { $op = IOpBin.ARSHIFT; }
shiftOperator returns [IntBinaryOp op]
: LSL { $op = IntBinaryOp.LSHIFT; }
| LSR { $op = IntBinaryOp.RSHIFT; }
| ASR { $op = IntBinaryOp.ARSHIFT; }
;

expr64
16 changes: 8 additions & 8 deletions dartagnan/src/main/antlr4/LitmusAssertions.g4
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ grammar LitmusAssertions;
import BaseLexer;

@header{
import com.dat3m.dartagnan.expression.op.COpBin;
import com.dat3m.dartagnan.expression.op.CmpOp;
}

assertionFilter
@@ -48,13 +48,13 @@ assertionListExpectation
: AssertionListExpectationTest Colon AssertionNot? AssertionExists Semi
;

assertionCompare returns [COpBin op]
: (Equals | EqualsEquals) {$op = COpBin.EQ;}
| NotEquals {$op = COpBin.NEQ;}
| GreaterEquals {$op = COpBin.GTE;}
| LessEquals {$op = COpBin.LTE;}
| Less {$op = COpBin.LT;}
| Greater {$op = COpBin.GT;}
assertionCompare returns [CmpOp op]
: (Equals | EqualsEquals) {$op = CmpOp.EQ;}
| NotEquals {$op = CmpOp.NEQ;}
| GreaterEquals {$op = CmpOp.GTE;}
| LessEquals {$op = CmpOp.LTE;}
| Less {$op = CmpOp.LT;}
| Greater {$op = CmpOp.GT;}
;

threadId returns [int id]
126 changes: 63 additions & 63 deletions dartagnan/src/main/antlr4/LitmusC.g4
Original file line number Diff line number Diff line change
@@ -56,46 +56,46 @@ whileExpression
| While LPar re RPar LBrace expression* RBrace
;

re locals [IOpBin op, String mo]
: ( AtomicAddReturn LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_MB;}
| AtomicAddReturnRelaxed LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELAXED;}
| AtomicAddReturnAcquire LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicAddReturnRelease LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELEASE;}
| AtomicSubReturn LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}
| AtomicSubReturnRelaxed LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELAXED;}
| AtomicSubReturnAcquire LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicSubReturnRelease LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELEASE;}
| AtomicIncReturn LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_MB;}
| AtomicIncReturnRelaxed LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELAXED;}
| AtomicIncReturnAcquire LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicIncReturnRelease LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELEASE;}
| AtomicDecReturn LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}
| AtomicDecReturnRelaxed LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELAXED;}
| AtomicDecReturnAcquire LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicDecReturnRelease LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELEASE;}) # reAtomicOpReturn
re locals [IntBinaryOp op, String mo]
: ( AtomicAddReturn LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_MB;}
| AtomicAddReturnRelaxed LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELAXED;}
| AtomicAddReturnAcquire LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicAddReturnRelease LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELEASE;}
| AtomicSubReturn LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}
| AtomicSubReturnRelaxed LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELAXED;}
| AtomicSubReturnAcquire LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicSubReturnRelease LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELEASE;}
| AtomicIncReturn LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_MB;}
| AtomicIncReturnRelaxed LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELAXED;}
| AtomicIncReturnAcquire LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicIncReturnRelease LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELEASE;}
| AtomicDecReturn LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}
| AtomicDecReturnRelaxed LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELAXED;}
| AtomicDecReturnAcquire LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicDecReturnRelease LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELEASE;}) # reAtomicOpReturn

| ( C11AtomicAdd LPar address = re Comma value = re Comma c11Mo RPar {$op = IOpBin.ADD;}
| C11AtomicSub LPar address = re Comma value = re Comma c11Mo RPar {$op = IOpBin.SUB;}
| C11AtomicOr LPar address = re Comma value = re Comma c11Mo RPar {$op = IOpBin.OR;}
| C11AtomicXor LPar address = re Comma value = re Comma c11Mo RPar {$op = IOpBin.XOR;}
| C11AtomicAnd LPar address = re Comma value = re Comma c11Mo RPar {$op = IOpBin.AND;}) # C11AtomicOp

| ( AtomicFetchAdd LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_MB;}
| AtomicFetchAddRelaxed LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELAXED;}
| AtomicFetchAddAcquire LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchAddRelease LPar value = re Comma address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELEASE;}
| AtomicFetchSub LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}
| AtomicFetchSubRelaxed LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELAXED;}
| AtomicFetchSubAcquire LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchSubRelease LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELEASE;}
| AtomicFetchInc LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_MB;}
| AtomicFetchIncRelaxed LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELAXED;}
| AtomicFetchIncAcquire LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchIncRelease LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_RELEASE;}
| AtomicFetchDec LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}
| AtomicFetchDecRelaxed LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELAXED;}
| AtomicFetchDecAcquire LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchDecRelease LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_RELEASE;}) # reAtomicFetchOp
| ( C11AtomicAdd LPar address = re Comma value = re Comma c11Mo RPar {$op = IntBinaryOp.ADD;}
| C11AtomicSub LPar address = re Comma value = re Comma c11Mo RPar {$op = IntBinaryOp.SUB;}
| C11AtomicOr LPar address = re Comma value = re Comma c11Mo RPar {$op = IntBinaryOp.OR;}
| C11AtomicXor LPar address = re Comma value = re Comma c11Mo RPar {$op = IntBinaryOp.XOR;}
| C11AtomicAnd LPar address = re Comma value = re Comma c11Mo RPar {$op = IntBinaryOp.AND;}) # C11AtomicOp

| ( AtomicFetchAdd LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_MB;}
| AtomicFetchAddRelaxed LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELAXED;}
| AtomicFetchAddAcquire LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchAddRelease LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELEASE;}
| AtomicFetchSub LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}
| AtomicFetchSubRelaxed LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELAXED;}
| AtomicFetchSubAcquire LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchSubRelease LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELEASE;}
| AtomicFetchInc LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_MB;}
| AtomicFetchIncRelaxed LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELAXED;}
| AtomicFetchIncAcquire LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchIncRelease LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_RELEASE;}
| AtomicFetchDec LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}
| AtomicFetchDecRelaxed LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELAXED;}
| AtomicFetchDecAcquire LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_ACQUIRE;}
| AtomicFetchDecRelease LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_RELEASE;}) # reAtomicFetchOp

| ( AtomicXchg LPar address = re Comma value = re RPar {$mo = Linux.MO_MB;}
| AtomicXchgRelaxed LPar address = re Comma value = re RPar {$mo = Linux.MO_RELAXED;}
@@ -120,9 +120,9 @@ re locals [IOpBin op, String mo]
| CmpXchgAcquire LPar address = re Comma cmp = re Comma value = re RPar {$mo = Linux.MO_ACQUIRE;}
| CmpXchgRelease LPar address = re Comma cmp = re Comma value = re RPar {$mo = Linux.MO_RELEASE;}) # reCmpXchg

| ( AtomicSubAndTest LPar value = re Comma address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}
| AtomicIncAndTest LPar address = re RPar {$op = IOpBin.ADD; $mo = Linux.MO_MB;}
| AtomicDecAndTest LPar address = re RPar {$op = IOpBin.SUB; $mo = Linux.MO_MB;}) # reAtomicOpAndTest
| ( AtomicSubAndTest LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}
| AtomicIncAndTest LPar address = re RPar {$op = IntBinaryOp.ADD; $mo = Linux.MO_MB;}
| AtomicDecAndTest LPar address = re RPar {$op = IntBinaryOp.SUB; $mo = Linux.MO_MB;}) # reAtomicOpAndTest

| AtomicAddUnless LPar address = re Comma value = re Comma cmp = re RPar # reAtomicAddUnless

@@ -153,11 +153,11 @@ re locals [IOpBin op, String mo]
| constant # reConst
;

nre locals [IOpBin op, String mo, String name]
: ( AtomicAdd LPar value = re Comma address = re RPar {$op = IOpBin.ADD;}
| AtomicSub LPar value = re Comma address = re RPar {$op = IOpBin.SUB;}
| AtomicInc LPar address = re RPar {$op = IOpBin.ADD;}
| AtomicDec LPar address = re RPar {$op = IOpBin.SUB;}) # nreAtomicOp
nre locals [IntBinaryOp op, String mo, String name]
: ( AtomicAdd LPar value = re Comma address = re RPar {$op = IntBinaryOp.ADD;}
| AtomicSub LPar value = re Comma address = re RPar {$op = IntBinaryOp.SUB;}
| AtomicInc LPar address = re RPar {$op = IntBinaryOp.ADD;}
| AtomicDec LPar address = re RPar {$op = IntBinaryOp.SUB;}) # nreAtomicOp

| ( AtomicSet LPar address = re Comma value = re RPar {$mo = Linux.MO_ONCE;}
| AtomicSetRelease LPar address = re Comma value = re RPar {$mo = Linux.MO_RELEASE;}
@@ -205,26 +205,26 @@ boolConst returns [Boolean value]
| False {$value = false;}
;

opBool returns [BOpBin op]
: AmpAmp {$op = BOpBin.AND;}
| BarBar {$op = BOpBin.OR;}
opBool returns [BoolBinaryOp op]
: AmpAmp {$op = BoolBinaryOp.AND;}
| BarBar {$op = BoolBinaryOp.OR;}
;

opCompare returns [COpBin op]
: EqualsEquals {$op = COpBin.EQ;}
| NotEquals {$op = COpBin.NEQ;}
| LessEquals {$op = COpBin.LTE;}
| GreaterEquals {$op = COpBin.GTE;}
| Less {$op = COpBin.LT;}
| Greater {$op = COpBin.GT;}
opCompare returns [CmpOp op]
: EqualsEquals {$op = CmpOp.EQ;}
| NotEquals {$op = CmpOp.NEQ;}
| LessEquals {$op = CmpOp.LTE;}
| GreaterEquals {$op = CmpOp.GTE;}
| Less {$op = CmpOp.LT;}
| Greater {$op = CmpOp.GT;}
;

opArith returns [IOpBin op]
: Plus {$op = IOpBin.ADD;}
| Minus {$op = IOpBin.SUB;}
| Amp {$op = IOpBin.AND;}
| Bar {$op = IOpBin.OR;}
| Circ {$op = IOpBin.XOR;}
opArith returns [IntBinaryOp op]
: Plus {$op = IntBinaryOp.ADD;}
| Minus {$op = IntBinaryOp.SUB;}
| Amp {$op = IntBinaryOp.AND;}
| Bar {$op = IntBinaryOp.OR;}
| Circ {$op = IntBinaryOp.XOR;}
;

c11Mo returns [String mo]
14 changes: 7 additions & 7 deletions dartagnan/src/main/antlr4/LitmusPPC.g4
Original file line number Diff line number Diff line change
@@ -134,13 +134,13 @@ offset
: DigitSequence
;

cond returns [COpBin op]
: Beq {$op = COpBin.EQ;}
| Bne {$op = COpBin.NEQ;}
| Bge {$op = COpBin.GTE;}
| Ble {$op = COpBin.LTE;}
| Bgt {$op = COpBin.GT;}
| Blt {$op = COpBin.LT;}
cond returns [CmpOp op]
: Beq {$op = CmpOp.EQ;}
| Bne {$op = CmpOp.NEQ;}
| Bge {$op = CmpOp.GTE;}
| Ble {$op = CmpOp.LTE;}
| Bgt {$op = CmpOp.GT;}
| Blt {$op = CmpOp.LT;}
;

assertionValue
34 changes: 17 additions & 17 deletions dartagnan/src/main/antlr4/LitmusPTX.g4
Original file line number Diff line number Diff line change
@@ -207,23 +207,23 @@ register
: Register
;

operation locals [IOpBin op]
: Add {$op = IOpBin.ADD;}
| Sub {$op = IOpBin.SUB;}
| Mul {$op = IOpBin.MUL;}
| Div {$op = IOpBin.DIV;}
| And {$op = IOpBin.AND;}
| Or {$op = IOpBin.OR;}
| Xor {$op = IOpBin.XOR;}
;

cond returns [COpBin op]
: Beq {$op = COpBin.EQ;}
| Bne {$op = COpBin.NEQ;}
| Bge {$op = COpBin.GTE;}
| Ble {$op = COpBin.LTE;}
| Bgt {$op = COpBin.GT;}
| Blt {$op = COpBin.LT;}
operation locals [IntBinaryOp op]
: Add {$op = IntBinaryOp.ADD;}
| Sub {$op = IntBinaryOp.SUB;}
| Mul {$op = IntBinaryOp.MUL;}
| Div {$op = IntBinaryOp.DIV;}
| And {$op = IntBinaryOp.AND;}
| Or {$op = IntBinaryOp.OR;}
| Xor {$op = IntBinaryOp.XOR;}
;

cond returns [CmpOp op]
: Beq {$op = CmpOp.EQ;}
| Bne {$op = CmpOp.NEQ;}
| Bge {$op = CmpOp.GTE;}
| Ble {$op = CmpOp.LTE;}
| Bgt {$op = CmpOp.GT;}
| Blt {$op = CmpOp.LT;}
;

assertionValue
14 changes: 7 additions & 7 deletions dartagnan/src/main/antlr4/LitmusRISCV.g4
Original file line number Diff line number Diff line change
@@ -192,13 +192,13 @@ offset
: DigitSequence
;

cond returns [COpBin op]
: Beq {$op = COpBin.EQ;}
| Bne {$op = COpBin.NEQ;}
| Bge {$op = COpBin.GTE;}
| Ble {$op = COpBin.LTE;}
| Bgt {$op = COpBin.GT;}
| Blt {$op = COpBin.LT;}
cond returns [CmpOp op]
: Beq {$op = CmpOp.EQ;}
| Bne {$op = CmpOp.NEQ;}
| Bge {$op = CmpOp.GTE;}
| Ble {$op = CmpOp.LTE;}
| Bgt {$op = CmpOp.GT;}
| Blt {$op = CmpOp.LT;}
;

assertionValue
34 changes: 17 additions & 17 deletions dartagnan/src/main/antlr4/LitmusVulkan.g4
Original file line number Diff line number Diff line change
@@ -253,23 +253,23 @@ avvisSemanticList
: (avvisSemantic)*
;

operation locals [IOpBin op]
: Period Add {$op = IOpBin.ADD;}
| Period Sub {$op = IOpBin.SUB;}
| Period Mul {$op = IOpBin.MUL;}
| Period Div {$op = IOpBin.DIV;}
| Period And {$op = IOpBin.AND;}
| Period Or {$op = IOpBin.OR;}
| Period Xor {$op = IOpBin.XOR;}
;

cond returns [COpBin op]
: Beq {$op = COpBin.EQ;}
| Bne {$op = COpBin.NEQ;}
| Bge {$op = COpBin.GTE;}
| Ble {$op = COpBin.LTE;}
| Bgt {$op = COpBin.GT;}
| Blt {$op = COpBin.LT;}
operation locals [IntBinaryOp op]
: Period Add {$op = IntBinaryOp.ADD;}
| Period Sub {$op = IntBinaryOp.SUB;}
| Period Mul {$op = IntBinaryOp.MUL;}
| Period Div {$op = IntBinaryOp.DIV;}
| Period And {$op = IntBinaryOp.AND;}
| Period Or {$op = IntBinaryOp.OR;}
| Period Xor {$op = IntBinaryOp.XOR;}
;

cond returns [CmpOp op]
: Beq {$op = CmpOp.EQ;}
| Bne {$op = CmpOp.NEQ;}
| Bge {$op = CmpOp.GTE;}
| Ble {$op = CmpOp.LTE;}
| Bgt {$op = CmpOp.GT;}
| Blt {$op = CmpOp.LT;}
;

Locations
Loading

0 comments on commit 77bc93b

Please sign in to comment.