diff options
| author | Alasdair Armstrong | 2019-02-07 15:06:05 +0000 |
|---|---|---|
| committer | Alasdair Armstrong | 2019-02-07 15:06:05 +0000 |
| commit | a0798a777d800f6255a1370806435a51d418a249 (patch) | |
| tree | 234be4c54456a98259a50aa729662e0cf083b9e9 /aarch64 | |
| parent | ddaf05544d182bd75471ce307458daf417c9e17f (diff) | |
Fix implicits in v8.2 public ARM spec
Diffstat (limited to 'aarch64')
| -rw-r--r-- | aarch64/no_vector/spec.sail | 164 | ||||
| -rwxr-xr-x | aarch64/prelude.sail | 7 |
2 files changed, 85 insertions, 86 deletions
diff --git a/aarch64/no_vector/spec.sail b/aarch64/no_vector/spec.sail index fc53e03e..c91da297 100644 --- a/aarch64/no_vector/spec.sail +++ b/aarch64/no_vector/spec.sail @@ -564,9 +564,9 @@ val UndefinedFault : unit -> unit effect {escape} function UndefinedFault () = assert(false, "Undefined fault") -val ThisInstrAddr : forall ('N : Int), 'N >= 0. unit -> bits('N) effect {rreg} +val ThisInstrAddr : forall ('N : Int), 'N >= 0. (implicit('N), unit) -> bits('N) effect {rreg} -function ThisInstrAddr () = return(slice(_PC, 0, 'N)) +function ThisInstrAddr(N, _) = slice(_PC, 0, N) val ThisInstr : unit -> bits(32) effect {rreg} @@ -1521,9 +1521,9 @@ val AArch32_CurrentCond : unit -> bits(4) effect {rreg} function AArch32_CurrentCond () = return(__currentCond) val aget_SP : forall ('width : Int), 'width >= 0. - unit -> bits('width) effect {escape, rreg} + (implicit('width), unit) -> bits('width) effect {escape, rreg} -function aget_SP () = { +function aget_SP(width, _) = { assert('width == 8 | 'width == 16 | 'width == 32 | 'width == 64, "((width == 8) || ((width == 16) || ((width == 32) || (width == 64))))"); if PSTATE.SP == 0b0 then return(slice(SP_EL0, 0, 'width)) else match PSTATE.EL { ? if ? == EL0 => return(slice(SP_EL0, 0, 'width)), @@ -1762,9 +1762,9 @@ function AArch64_InstructionDevice (addrdesc__arg, vaddress, ipaddress, 'level, } val aget_Vpart : forall ('width : Int), 'width >= 0. - (int, int) -> bits('width) effect {escape, rreg} + (implicit('width), int, int) -> bits('width) effect {escape, rreg} -function aget_Vpart ('n, 'part) = { +function aget_Vpart (width, 'n, 'part) = { assert(n >= 0 & n <= 31, "((n >= 0) && (n <= 31))"); assert(part == 0 | part == 1, "((part == 0) || (part == 1))"); if part == 0 then { @@ -1777,12 +1777,12 @@ function aget_Vpart ('n, 'part) = { } val aget_V : forall ('width : Int), 'width >= 0. - int -> bits('width) effect {escape, rreg} + (implicit('width), int) -> bits('width) effect {escape, rreg} -function aget_V 'n = { +function aget_V(width, n) = { assert(n >= 0 & n <= 31, "((n >= 0) && (n <= 31))"); - assert('width == 8 | 'width == 16 | 'width == 32 | 'width == 64 | 'width == 128, "((width == 8) || ((width == 16) || ((width == 32) || ((width == 64) || (width == 128)))))"); - return(slice(_V[n], 0, 'width)) + assert(width == 8 | width == 16 | width == 32 | width == 64 | width == 128); + return(slice(_V[n], 0, width)) } val LookUpRIndex : (int, bits(5)) -> int effect {escape, undef} @@ -1829,9 +1829,9 @@ function BitReverse data = { return(result) } -val NextInstrAddr : forall ('N : Int), 'N >= 0. unit -> bits('N) effect {rreg} +val NextInstrAddr : forall ('N : Int), 'N >= 0. (implicit('N), unit) -> bits('N) effect {rreg} -function NextInstrAddr () = return(slice(_PC + ThisInstrLength() / 8, 0, 'N)) +function NextInstrAddr(N, _) = slice(_PC + ThisInstrLength() / 8, 0, N) val AArch32_ExceptionClass : Exception -> (int, bits(1)) effect {escape, rreg, undef} @@ -2000,7 +2000,7 @@ val aget_Elem__0 : forall ('N : Int) ('size : Int), 'N >= 0 & 'size >= 0. (bits('N), int, atom('size)) -> bits('size) effect {escape} val aget_Elem__1 : forall ('N : Int) ('size : Int), 'N >= 0 & 'size >= 0. - (bits('N), int) -> bits('size) effect {escape} + (implicit('size), bits('N), int) -> bits('size) effect {escape} overload aget_Elem = {aget_Elem__0, aget_Elem__1} @@ -2009,7 +2009,7 @@ function aget_Elem__0 (vector_name, 'e, size) = { return(slice(vector_name, e * 'size, 'size)) } -function aget_Elem__1 (vector_name, 'e) = return(aget_Elem(vector_name, e, 'size)) +function aget_Elem__1 (size, vector_name, 'e) = return(aget_Elem(vector_name, e, size)) val UnsignedSatQ : forall ('N : Int), 'N >= 0. (int, atom('N)) -> (bits('N), bool) effect {undef} @@ -2060,24 +2060,24 @@ function SatQ ('i, N, unsigned) = { } val Replicate : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. - bits('M) -> bits('N) effect {escape} + (implicit('N), bits('M)) -> bits('N) effect {escape} -function Replicate x = { - assert('N % 'M == 0, "((N MOD M) == 0)"); - let 'O = 'N / 'M; +function Replicate(N, x) = { + assert(N % 'M == 0, "((N MOD M) == 0)"); + let 'O = N / 'M; assert(constraint('O * 'M == 'N)); - return(replicate_bits(x, 'N / 'M)) + return(replicate_bits(x, N / 'M)) } val Zeros__0 = {c: "zeros"} : forall ('N : Int), 'N >= 0. atom('N) -> bits('N) -val Zeros__1 : forall ('N : Int), 'N >= 0. unit -> bits('N) +val Zeros__1 : forall ('N : Int), 'N >= 0. (implicit('N), unit) -> bits('N) overload Zeros = {Zeros__0, Zeros__1} -function Zeros__0 N = return(replicate_bits(0b0, 'N)) +function Zeros__0(N) = replicate_bits(0b0, N) -function Zeros__1 () = return(Zeros('N)) +function Zeros__1(N, _) = Zeros__0(N) val __ResetMemoryState : unit -> unit effect {rreg, wreg} @@ -2090,16 +2090,16 @@ val ZeroExtend__0 = {c: "zero_extend"} : forall ('M : Int) ('N : Int), 'M >= 0 & (bits('M), atom('N)) -> bits('N) effect {escape} val ZeroExtend__1 : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. - bits('M) -> bits('N) effect {escape} + (implicit('N), bits('M)) -> bits('N) effect {escape} overload ZeroExtend = {ZeroExtend__0, ZeroExtend__1} -function ZeroExtend__0 (x, N) = { - assert('N >= 'M); - return(Zeros('N - 'M) @ x) +function ZeroExtend__0(x, N) = { + assert(N >= 'M); + Zeros(N - 'M) @ x } -function ZeroExtend__1 x = return(ZeroExtend(x, 'N)) +function ZeroExtend__1(N, x) = ZeroExtend__0(x, N) val aset_Vpart : forall ('width : Int), 'width >= 0. (int, int, bits('width)) -> unit effect {escape, wreg, rreg} @@ -2278,10 +2278,10 @@ function GetPSRFromPSTATE () = { return(spsr) } -val FPZero : forall ('N : Int), 1 >= 0 & 'N >= 0. - bits(1) -> bits('N) effect {escape} +val FPZero : forall ('N : Int), 'N >= 0. + (implicit('N), bits(1)) -> bits('N) effect {escape} -function FPZero sign = { +function FPZero(N, sign) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); let 'E = (if 'N == 16 then 5 else if 'N == 32 then 8 else 11) : {|5, 8, 11|}; F : atom('N - 'E - 1) = ('N - E) - 1; @@ -2303,9 +2303,9 @@ function ExceptionSyndrome typ = { } val ConstrainUnpredictableBits : forall ('width : Int), 'width >= 0. - Unpredictable -> (Constraint, bits('width)) effect {undef} + (implicit('width), Unpredictable) -> (Constraint, bits('width)) effect {undef} -function ConstrainUnpredictableBits which = { +function ConstrainUnpredictableBits(width, which) = { c : Constraint = ConstrainUnpredictable(which); if c == Constraint_UNKNOWN then return((c, Zeros('width))) else return((c, undefined)) } @@ -2335,9 +2335,9 @@ function AArch32_PhysicalSErrorSyndrome () = { } val VFPExpandImm : forall ('N : Int), 8 >= 0 & 'N >= 0. - bits(8) -> bits('N) effect {escape} + (implicit('N), bits(8)) -> bits('N) effect {escape} -function VFPExpandImm imm8 = { +function VFPExpandImm(N, imm8) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); let 'E = (if 'N == 16 then 5 else if 'N == 32 then 8 else 11) : {|5, 8, 11|}; F : atom('N - 'E - 1) = ('N - E) - 1; @@ -2351,28 +2351,28 @@ val SignExtend__0 : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. (bits('M), atom('N)) -> bits('N) effect {escape} val SignExtend__1 : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. - bits('M) -> bits('N) effect {escape} + (implicit('N), bits('M)) -> bits('N) effect {escape} overload SignExtend = {SignExtend__0, SignExtend__1} -function SignExtend__0 (x, N) = { +function SignExtend__0(x, N) = { assert('N >= 'M); - return(replicate_bits([x['M - 1]], 'N - 'M) @ x) + replicate_bits([x['M - 1]], 'N - 'M) @ x } -function SignExtend__1 x = return(SignExtend(x, 'N)) +function SignExtend__1(N, x) = SignExtend__0(x, N) val Extend__0 : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. (bits('M), atom('N), bool) -> bits('N) effect {escape} val Extend__1 : forall ('M : Int) ('N : Int), 'M >= 0 & 'N >= 0. - (bits('M), bool) -> bits('N) effect {escape} + (implicit('N), bits('M), bool) -> bits('N) effect {escape} overload Extend = {Extend__0, Extend__1} -function Extend__0 (x, N, unsigned) = return(if unsigned then ZeroExtend(x, 'N) else SignExtend(x, 'N)) +function Extend__0(x, N, unsigned) = if unsigned then ZeroExtend(x, N) else SignExtend(x, N) -function Extend__1 (x, unsigned) = return(Extend(x, 'N, unsigned)) +function Extend__1(N, x, unsigned) = Extend__0(x, N, unsigned) val ASR_C : forall ('N : Int), 'N >= 0 & 'N >= 0 & 1 >= 0. (bits('N), int) -> (bits('N), bits(1)) effect {escape} @@ -2398,22 +2398,22 @@ function ASR (x, 'shift) = { val Ones__0 : forall ('N : Int), 'N >= 0. atom('N) -> bits('N) -val Ones__1 : forall ('N : Int), 'N >= 0. unit -> bits('N) +val Ones__1 : forall ('N : Int), 'N >= 0. (implicit('N), unit) -> bits('N) overload Ones = {Ones__0, Ones__1} -function Ones__0 N = return(replicate_bits(0b1, 'N)) +function Ones__0(N) = replicate_bits(0b1, N) -function Ones__1 () = return(Ones('N)) +function Ones__1(N, _) = Ones(N) val IsOnes : forall ('N : Int), 'N >= 0. bits('N) -> bool function IsOnes x = return(x == Ones('N)) val FPMaxNormal : forall ('N : Int), 1 >= 0 & 'N >= 0. - bits(1) -> bits('N) effect {escape} + (implicit('N), bits(1)) -> bits('N) effect {escape} -function FPMaxNormal sign = { +function FPMaxNormal(N, sign) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); let 'E = (if 'N == 16 then 5 else if 'N == 32 then 8 else 11) : {|5, 8, 11|}; F : atom('N - 'E - 1) = ('N - E) - 1; @@ -2423,9 +2423,9 @@ function FPMaxNormal sign = { } val FPInfinity : forall ('N : Int), 1 >= 0 & 'N >= 0. - bits(1) -> bits('N) effect {escape} + (implicit('N), bits(1)) -> bits('N) effect {escape} -function FPInfinity sign = { +function FPInfinity(N, sign) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); let 'E = (if 'N == 16 then 5 else if 'N == 32 then 8 else 11) : {|5, 8, 11|}; F : atom('N - 'E - 1) = ('N - E) - 1; @@ -2434,9 +2434,9 @@ function FPInfinity sign = { return(append(append(sign, exp), frac)) } -val FPDefaultNaN : forall ('N : Int), 'N >= 0. unit -> bits('N) effect {escape} +val FPDefaultNaN : forall ('N : Int), 'N >= 0. (implicit('N), unit) -> bits('N) effect {escape} -function FPDefaultNaN () = { +function FPDefaultNaN(N, _)= { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); let 'E = (if 'N == 16 then 5 else if 'N == 32 then 8 else 11) : {|5, 8, 11|}; F : atom('N - 'E - 1) = ('N - E) - 1; @@ -2447,9 +2447,9 @@ function FPDefaultNaN () = { } val FPConvertNaN : forall ('N : Int) ('M : Int), 'N >= 0 & 'M >= 0. - bits('N) -> bits('M) effect {escape, undef} + (implicit('M), bits('N)) -> bits('M) effect {escape, undef} -function FPConvertNaN op = { +function FPConvertNaN(M, op) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); assert('M == 16 | 'M == 32 | 'M == 64, "((M == 16) || ((M == 32) || (M == 64)))"); result : bits('M) = undefined; @@ -2701,9 +2701,9 @@ function aset_ELR__1 value_name = { } val aget_X : forall ('width : Int), 'width >= 0. - int -> bits('width) effect {escape, rreg} + (implicit('width), int) -> bits('width) effect {escape, rreg} -function aget_X 'n = { +function aget_X(width, 'n) = { assert(n >= 0 & n <= 31, "((n >= 0) && (n <= 31))"); assert('width == 8 | 'width == 16 | 'width == 32 | 'width == 64, "((width == 8) || ((width == 16) || ((width == 32) || (width == 64))))"); if n != 31 then return(slice(_R[n], 0, 'width)) else return(Zeros('width)) @@ -2945,9 +2945,9 @@ function integer_arithmetic_addsub_carry_decode (sf, op, S, Rm, opcode2, Rn, Rd) } val ExtendReg : forall ('N : Int), 'N >= 0. - (int, ExtendType, int) -> bits('N) effect {escape, rreg, undef} + (implicit('N), int, ExtendType, int) -> bits('N) effect {escape, rreg, undef} -function ExtendReg (reg, typ, shift) = { +function ExtendReg (N, reg, typ, shift) = { assert(shift >= 0 & shift <= 4, "((shift >= 0) && (shift <= 4))"); val_name : bits('N) = aget_X(reg); unsigned : bool = undefined; @@ -3051,9 +3051,9 @@ function aarch64_integer_bitfield ('R, 'S, 'd, datasize, extend, inzero, 'n, tma } val ShiftReg : forall ('N : Int), 'N >= 0. - (int, ShiftType, int) -> bits('N) effect {escape, rreg, undef} + (implicit('N), int, ShiftType, int) -> bits('N) effect {escape, rreg, undef} -function ShiftReg ('reg, typ, 'amount) = { +function ShiftReg (N, 'reg, typ, 'amount) = { result : bits('N) = aget_X(reg); match typ { ShiftType_LSL => result = LSL(result, amount), @@ -3482,9 +3482,9 @@ function FPProcessException (exception, fpcr) = { } val FPRoundBase : forall ('N : Int), 32 >= 0 & 'N >= 0. - (real, bits(32), FPRounding) -> bits('N) effect {escape, wreg, rreg, undef} + (implicit('N), real, bits(32), FPRounding) -> bits('N) effect {escape, wreg, rreg, undef} -function FPRoundBase (op, fpcr, rounding) = { +function FPRoundBase (N, op, fpcr, rounding) = { assert('N == 16 | 'N == 32 | 'N == 64); assert(op != 0.0); assert(rounding != FPRounding_TIEAWAY); @@ -3591,34 +3591,34 @@ function FPRoundBase (op, fpcr, rounding) = { } val FPRoundCV : forall ('N : Int), 32 >= 0 & 'N >= 0. - (real, bits(32), FPRounding) -> bits('N) effect {escape, rreg, undef, wreg} + (implicit('N), real, bits(32), FPRounding) -> bits('N) effect {escape, rreg, undef, wreg} -function FPRoundCV (op, fpcr__arg, rounding) = { +function FPRoundCV (N, op, fpcr__arg, rounding) = { fpcr = fpcr__arg; fpcr = __SetSlice_bits(32, 1, fpcr, 19, 0b0); return(FPRoundBase(op, fpcr, rounding)) } -val FPRound__0 : forall ('N : Int), 32 >= 0 & 'N >= 0. - (real, bits(32), FPRounding) -> bits('N) effect {escape, rreg, undef, wreg} +val FPRound__0 : forall ('N : Int), 'N >= 0. + (implicit('N), real, bits(32), FPRounding) -> bits('N) effect {escape, rreg, undef, wreg} -val FPRound__1 : forall ('N : Int), 32 >= 0 & 'N >= 0. - (real, bits(32)) -> bits('N) effect {escape, rreg, undef, wreg} +val FPRound__1 : forall ('N : Int), 'N >= 0. + (implicit('N), real, bits(32)) -> bits('N) effect {escape, rreg, undef, wreg} overload FPRound = {FPRound__0, FPRound__1} -function FPRound__0 (op, fpcr__arg, rounding) = { +function FPRound__0 (N, op, fpcr__arg, rounding) = { fpcr = fpcr__arg; fpcr = __SetSlice_bits(32, 1, fpcr, 26, 0b0); return(FPRoundBase(op, fpcr, rounding)) } -function FPRound__1 (op, fpcr) = return(FPRound(op, fpcr, FPRoundingMode(fpcr))) +function FPRound__1 (N, op, fpcr) = return(FPRound(op, fpcr, FPRoundingMode(fpcr))) val FixedToFP : forall ('M : Int) ('N : Int), 'M >= 0 & 32 >= 0 & 'N >= 0. - (bits('M), int, bool, bits(32), FPRounding) -> bits('N) effect {escape, undef, wreg, rreg} + (implicit('N), bits('M), int, bool, bits(32), FPRounding) -> bits('N) effect {escape, undef, wreg, rreg} -function FixedToFP (op, 'fbits, unsigned, fpcr, rounding) = { +function FixedToFP (N, op, 'fbits, unsigned, fpcr, rounding) = { assert('N == 16 | 'N == 32 | 'N == 64); assert('M == 16 | 'M == 32 | 'M == 64); result : bits('N) = undefined; @@ -3896,14 +3896,14 @@ function FPUnpackCV (fpval, fpcr__arg) = { } val FPConvert__0 : forall ('N : Int) ('M : Int), 'N >= 0 & 32 >= 0 & 'M >= 0. - (bits('N), bits(32), FPRounding) -> bits('M) effect {escape, rreg, undef, wreg} + (implicit('M), bits('N), bits(32), FPRounding) -> bits('M) effect {escape, rreg, undef, wreg} val FPConvert__1 : forall ('N : Int) ('M : Int), 'N >= 0 & 32 >= 0 & 'M >= 0. - (bits('N), bits(32)) -> bits('M) effect {escape, rreg, undef, wreg} + (implicit('M), bits('N), bits(32)) -> bits('M) effect {escape, rreg, undef, wreg} overload FPConvert = {FPConvert__0, FPConvert__1} -function FPConvert__0 (op, fpcr, rounding) = { +function FPConvert__0 (M, op, fpcr, rounding) = { assert('M == 16 | 'M == 32 | 'M == 64); assert('N == 16 | 'N == 32 | 'N == 64); result : bits('M) = undefined; @@ -3927,7 +3927,7 @@ function FPConvert__0 (op, fpcr, rounding) = { return(result) } -function FPConvert__1 (op, fpcr) = return(FPConvert(op, fpcr, FPRoundingMode(fpcr))) +function FPConvert__1 (M, op, fpcr) = return(FPConvert(op, fpcr, FPRoundingMode(fpcr))) val FPUnpack : forall ('N : Int), 'N >= 0 & 32 >= 0 & 1 >= 0. (bits('N), bits(32)) -> (FPType, bits(1), real) effect {escape, rreg, undef, wreg} @@ -3943,9 +3943,9 @@ function FPUnpack (fpval, fpcr__arg) = { } val FPToFixedJS : forall ('M : Int) ('N : Int), 'M >= 0 & 32 >= 0 & 'N >= 0. - (bits('M), bits(32), bool) -> bits('N) effect {escape, rreg, undef, wreg} + (implicit('N), bits('M), bits(32), bool) -> bits('N) effect {escape, rreg, undef, wreg} -function FPToFixedJS (op, fpcr, Is64) = { +function FPToFixedJS (N, op, fpcr, Is64) = { assert('M == 64 & 'N == 32, "((M == 64) && (N == 32))"); value_name : real = undefined; sign : bits(1) = undefined; @@ -3976,9 +3976,9 @@ function FPToFixedJS (op, fpcr, Is64) = { } val FPToFixed : forall ('N : Int) ('M : Int), 'N >= 0 & 32 >= 0 & 'M >= 0. - (bits('N), int, bool, bits(32), FPRounding) -> bits('M) effect {escape, rreg, undef, wreg} + (implicit('M), bits('N), int, bool, bits(32), FPRounding) -> bits('M) effect {escape, rreg, undef, wreg} -function FPToFixed (op, 'fbits, unsigned, fpcr, rounding) = { +function FPToFixed (M, op, 'fbits, unsigned, fpcr, rounding) = { assert('N == 16 | 'N == 32 | 'N == 64, "((N == 16) || ((N == 32) || (N == 64)))"); assert('M == 16 | 'M == 32 | 'M == 64, "((M == 16) || ((M == 32) || (M == 64)))"); assert(fbits >= 0, "(fbits >= 0)"); @@ -5273,9 +5273,9 @@ function IsOnes_slice (xs, i, 'l) = { } val ZeroExtend_slice_append : forall 'n 'm 'o, 'n >= 0 & 'm >= 0 & 'o >= 0. - (bits('n), int, int, bits('m)) -> bits('o) effect {escape} + (implicit('o), bits('n), int, int, bits('m)) -> bits('o) effect {escape} -function ZeroExtend_slice_append (xs, i, 'l, ys) = { +function ZeroExtend_slice_append (o, xs, i, 'l, ys) = { assert(constraint('l >= 0)); ZeroExtend(slice(xs, i, l) @ ys) } @@ -11573,9 +11573,9 @@ function integer_arithmetic_addsub_extendedreg_decode (sf, op, S, opt, Rm, optio } val DecodeBitMasks : forall ('M : Int), 1 >= 0 & 6 >= 0 & 6 >= 0 & 'M >= 0 & 'M >= 0. - (bits(1), bits(6), bits(6), bool) -> (bits('M), bits('M)) effect {escape, rreg, undef, wreg} + (implicit('M), bits(1), bits(6), bits(6), bool) -> (bits('M), bits('M)) effect {escape, rreg, undef, wreg} -function DecodeBitMasks (immN, imms, immr, immediate) = { +function DecodeBitMasks (M, immN, imms, immr, immediate) = { tmask : bits(64) = undefined; wmask : bits(64) = undefined; tmask_and : bits(6) = undefined; diff --git a/aarch64/prelude.sail b/aarch64/prelude.sail index 98318dd4..f4f7dc75 100755 --- a/aarch64/prelude.sail +++ b/aarch64/prelude.sail @@ -6,8 +6,6 @@ $include <arith.sail> type bits ('n : Int) = vector('n, dec, bit) -val eq_bit = {ocaml: "(fun (x, y) -> x = y)", lem: "eq", interpreter: "eq_anything", c: "eq_bit", coq: "eq_bit"} : (bit, bit) -> bool - val eq_vec = {ocaml: "eq_list", lem: "eq_vec", c: "eq_bits", coq: "eq_vec"} : forall 'n. (bits('n), bits('n)) -> bool val eq_string = {ocaml: "eq_string", lem: "eq", c: "eq_string", coq: "generic_eq"} : (string, string) -> bool @@ -28,7 +26,7 @@ val list_length = {ocaml: "length", lem: "length_list", c: "length", coq: "lengt overload length = {bitvector_length, vector_length, list_length} -overload operator == = {eq_bit, eq_vec, eq_string, eq_real, eq_anything} +overload operator == = {eq_vec, eq_string, eq_real, eq_anything} val vector_subrange_A = { ocaml: "subrange", @@ -135,7 +133,7 @@ val or_vec = {lem: "or_vec", c: "or_bits", coq: "or_vec"}: forall 'n. (bits('n), function or_vec (xs, ys) = builtin_or_vec(xs, ys) -overload operator | = {or_bool, or_vec} +overload operator | = {or_vec} val UInt = { ocaml: "uint", @@ -373,3 +371,4 @@ val __GetVerbosity = {c: "sail_get_verbosity"}: unit -> bits(64) effect {rreg, u val get_cycle_count = { c: "get_cycle_count" } : unit -> int effect {undef, wreg, rreg, rmem, wmem} +overload __size = {length} |
