[Haskell-cafe] Implementing a new primtype

Paul Monday paul.monday at parsci.com
Tue Oct 11 00:57:39 CEST 2011


There seems to be plenty of documentation around on implementing a new primop, much of it needs some tweaking as files have moved and such.  I can't seem to find any documentation about how to implement primtypes though.

For example, I want to experiment with a new primtype "DV#", my assumption that the type was first declared in the primops.txt.pp seems incorrect.  So I'm trying to backtrack a bit and see where primtypes first appear, I'm hoping someone can at least give me a pointer :-)

For example:
./compiler/prelude/primops.txt.pp

Add the following:
primtype DoubleVec# a

Compiles fine

Add a primop on the type:
primop ExtractDoubleVecOp "extractDoubleVec#" GenPrimOp
   DoubleVec# -> Int# -> Double#

And suddenly it's not as friendly.  I expected a compile issue since I hadn't added it to CgPrimOps.hs yet, but this is not that compile problem:
make -r --no-print-directory -f ghc.mk phase=1 phase_1_builds
/usr/bin/gcc -E  -undef -traditional -P -Iincludes  -x c compiler/prelude/primops.txt.pp | grep -v '^#pragma GCC' > compiler/prelude/primops.txt
"inplace/bin/genprimopcode" --data-decl          < compiler/prelude/primops.txt > compiler/primop-data-decl.hs-incl
"inplace/bin/genprimopcode" --primop-tag         < compiler/prelude/primops.txt > compiler/primop-tag.hs-incl
"inplace/bin/genprimopcode" --primop-list        < compiler/prelude/primops.txt > compiler/primop-list.hs-incl
"inplace/bin/genprimopcode" --has-side-effects   < compiler/prelude/primops.txt > compiler/primop-has-side-effects.hs-incl
"inplace/bin/genprimopcode" --out-of-line        < compiler/prelude/primops.txt > compiler/primop-out-of-line.hs-incl
"inplace/bin/genprimopcode" --commutable         < compiler/prelude/primops.txt > compiler/primop-commutable.hs-incl
"inplace/bin/genprimopcode" --code-size          < compiler/prelude/primops.txt > compiler/primop-code-size.hs-incl
"inplace/bin/genprimopcode" --can-fail           < compiler/prelude/primops.txt > compiler/primop-can-fail.hs-incl
"inplace/bin/genprimopcode" --strictness         < compiler/prelude/primops.txt > compiler/primop-strictness.hs-incl
"inplace/bin/genprimopcode" --primop-primop-info < compiler/prelude/primops.txt > compiler/primop-primop-info.hs-incl
genprimopcode: ppType: can't handle: TyApp "DoubleVec#" []

make[1]: *** [compiler/primop-primop-info.hs-incl] Error 1
make[1]: *** Deleting file `compiler/primop-primop-info.hs-incl'
make: *** [all] Error 2


So, I'm thinking the type needs to be better defined but I haven't tracked it down yet (I'm working on it though ;-)

Any clues?

Paul Monday
Parallel Scientific, LLC.
paul.monday at parsci.com




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111010/c4e1c137/attachment-0001.htm>


More information about the Haskell-Cafe mailing list