Skip to content

Lower level memcpy primop

I'm doing some really low-level buffer stuff, and it would be quite helpful if there were lower-level memcpy primitives.

I'm thinking something like:

copyBytes# :: Addr# -> Addr# -> Int# -> State# s -> State# s
copyBytes dst src size _ = ...

I would expect it to compile, on x86, into "rep movsb", which is frequently optimal on Ivy Bridge and Haswell.

The other memcpy primitives use Array# or MutableArray#, and it's not clear how, if all you have is an Addr#, how to get the corresponding Array# or MutableArray#. (Can you just cast?)

It may be appropriate to have corresponding 16-bit and 32-bit operations; "rep movsw" and "rep movsd", respectively.

Trac metadata
Trac field Value
Version 7.8.4
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information