summaryrefslogtreecommitdiff
path: root/src/Helium/Instructions.agda
diff options
context:
space:
mode:
authorGreg Brown <greg.brown@cl.cam.ac.uk>2021-12-20 14:36:36 +0000
committerGreg Brown <greg.brown@cl.cam.ac.uk>2021-12-20 14:38:02 +0000
commit79f1d021a7cd230d11cbd76dc4367024566a7bd5 (patch)
tree41ede96b6331b0494272b2eb5a9872cb50f3ada6 /src/Helium/Instructions.agda
parent2f1c39b17746ea8ebf682329a7d27540af7bdf07 (diff)
Define semantics for vadd.
Diffstat (limited to 'src/Helium/Instructions.agda')
-rw-r--r--src/Helium/Instructions.agda39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Helium/Instructions.agda b/src/Helium/Instructions.agda
new file mode 100644
index 0000000..0d21322
--- /dev/null
+++ b/src/Helium/Instructions.agda
@@ -0,0 +1,39 @@
+{-# OPTIONS --safe --without-K #-}
+
+module Helium.Instructions where
+
+open import Data.Fin
+open import Data.Nat
+open import Data.Sum
+open import Relation.Binary.PropositionalEquality
+
+GenReg : Set
+GenReg = Fin 16
+
+VecReg : Set
+VecReg = Fin 8
+
+module VAdd
+ where
+
+ record VAdd : Set where
+ field
+ size : Fin 3
+ dest : VecReg
+ src₁ : VecReg
+ src₂ : GenReg ⊎ VecReg
+
+ esize : VAdd → Fin 33
+ esize record { size = zero } = # 8
+ esize record { size = (suc zero) } = # 16
+ esize record { size = (suc (suc zero)) } = # 32
+
+ elements : VAdd → Fin 5
+ elements record { size = zero } = # 4
+ elements record { size = (suc zero) } = # 2
+ elements record { size = (suc (suc zero)) } = # 1
+
+ elem*esize≡32 : ∀ d → toℕ (elements d) * toℕ (esize d) ≡ 32
+ elem*esize≡32 record { size = zero } = refl
+ elem*esize≡32 record { size = (suc zero) } = refl
+ elem*esize≡32 record { size = (suc (suc zero)) } = refl