From 281a29f01346bd2f00fbaca8391f38d856a45d6d Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Mon, 21 Feb 2022 12:18:31 +0000 Subject: Replace nat indices with fins. --- src/Helium/Instructions/Base.agda | 103 +++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 51 deletions(-) (limited to 'src/Helium/Instructions/Base.agda') diff --git a/src/Helium/Instructions/Base.agda b/src/Helium/Instructions/Base.agda index 3261107..0a0e01f 100644 --- a/src/Helium/Instructions/Base.agda +++ b/src/Helium/Instructions/Base.agda @@ -10,6 +10,7 @@ module Helium.Instructions.Base where open import Data.Bool as Bool using (true; false) open import Data.Fin as Fin using (Fin; Fin′; zero; suc; toℕ) +open import Data.Fin.Patterns open import Data.Nat as ℕ using (ℕ; zero; suc) import Data.Nat.Properties as ℕₚ open import Data.Sum using ([_,_]′; inj₂) @@ -49,25 +50,25 @@ open Core.Code State public -- Direct from State S : ∀ {n Γ} → Expression {n} Γ (array (bits 32) 32) -S = state 0 +S = state 0F R : ∀ {n Γ} → Expression {n} Γ (array (bits 32) 16) -R = state 1 +R = state 1F VPR-P0 : ∀ {n Γ} → Expression {n} Γ (bits 16) -VPR-P0 = state 2 +VPR-P0 = state 2F VPR-mask : ∀ {n Γ} → Expression {n} Γ (bits 8) -VPR-mask = state 3 +VPR-mask = state 3F FPSCR-QC : ∀ {n Γ} → Expression {n} Γ bit -FPSCR-QC = state 4 +FPSCR-QC = state 4F AdvanceVPTState : ∀ {n Γ} → Expression {n} Γ bool -AdvanceVPTState = state 5 +AdvanceVPTState = state 5F BeatId : ∀ {n Γ} → Expression {n} Γ beat -BeatId = state 6 +BeatId = state 6F -- Indirect @@ -106,30 +107,30 @@ sliceⁱ {m = suc m} n i = sliceⁱ (suc n) i ∶ [ get n i ] --- Functions Int : ∀ {n} → Function (bits n ∷ bool ∷ []) int -Int = skip ∙return (if var 1 then uint (var 0) else sint (var 0)) +Int = skip ∙return (if var 1F then uint (var 0F) else sint (var 0F)) -- arguments swapped, pred n SignedSatQ : ∀ n → Function (int ∷ []) (tuple 2 (bits (suc n) ∷ bool ∷ [])) SignedSatQ n = declare (lit (true ′b)) ( - if max >3 (tup ((var 3) ∷ []))) + tup (index (var 5F) (var 3F) ∷ var 0F ∷ []) ≔ call (SignedSatQ (toℕ esize-1)) (var 1F ∷ []) ∙ + if var 0F && hasBit (var 6F) (fin e*esize>>3 (tup ((var 3F) ∷ []))) then FPSCR-QC ≔ lit (true ′x) else skip))) @@ -298,9 +299,9 @@ private helper Instr.32bit i = Fin.combine i zero vqdmulh : Instr.VQDMulH → Procedure [] -vqdmulh d = vqr?dmulh d (skip ∙return lit (2 ′i) * var 0 * var 1 >> toℕ esize) +vqdmulh d = vqr?dmulh d (skip ∙return lit (2 ′i) * var 0F * var 1F >> toℕ esize) where open Instr.VecOp₂ d using (esize) vqrdmulh : Instr.VQRDMulH → Procedure [] -vqrdmulh d = vqr?dmulh d (skip ∙return lit (2 ′i) * var 0 * var 1 + lit (1 ′i) << toℕ esize-1 >> toℕ esize) +vqrdmulh d = vqr?dmulh d (skip ∙return lit (2 ′i) * var 0F * var 1F + lit (1 ′i) << toℕ esize-1 >> toℕ esize) where open Instr.VecOp₂ d using (esize; esize-1) -- cgit v1.2.3