diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs index 6b992e3fe734c149779891cf4f232ac854299d09..2b28c64a5e5b06d03df341e74789e9d6befcde69 100644 --- a/ghc/compiler/nativeGen/StixPrim.lhs +++ b/ghc/compiler/nativeGen/StixPrim.lhs @@ -212,6 +212,30 @@ primCode [lhs] UnsafeFreezeByteArrayOp [rhs] = simpleCoercion PtrRep lhs rhs \end{code} +Returning the size of (mutable) byte arrays is just +an indexing operation. + +\begin{code} +primCode [lhs] SizeofByteArrayOp [rhs] + = let + lhs' = amodeToStix lhs + rhs' = amodeToStix rhs + sz = StIndex IntRep rhs' fixedHS + assign = StAssign IntRep lhs' (StInd IntRep sz) + in + returnUs (\xs -> assign : xs) + +primCode [lhs] SizeofMutableByteArrayOp [rhs] + = let + lhs' = amodeToStix lhs + rhs' = amodeToStix rhs + sz = StIndex IntRep rhs' fixedHS + assign = StAssign IntRep lhs' (StInd IntRep sz) + in + returnUs (\xs -> assign : xs) + +\end{code} + Most other array primitives translate to simple indexing. \begin{code}