Commit 22932389 authored by ian@well-typed.com's avatar ian@well-typed.com

Fix popcnt calls

We don't want to narrow the argument size before making the foreign
call: Word8 still gets passed as a Word-sized argument
parent 7706bee0
......@@ -485,16 +485,11 @@ emitPrimOp _ [] SetByteArrayOp [ba,off,len,c] =
doSetByteArrayOp ba off len c
-- Population count
emitPrimOp dflags [res] PopCnt8Op [w] =
emitPopCntCall res (CmmMachOp (mo_WordTo8 dflags) [w]) W8
emitPrimOp dflags [res] PopCnt16Op [w] =
emitPopCntCall res (CmmMachOp (mo_WordTo16 dflags) [w]) W16
emitPrimOp dflags [res] PopCnt32Op [w] =
emitPopCntCall res (CmmMachOp (mo_WordTo32 dflags) [w]) W32
emitPrimOp _ [res] PopCnt64Op [w] =
emitPopCntCall res w W64 -- arg always has type W64, no need to narrow
emitPrimOp dflags [res] PopCntOp [w] =
emitPopCntCall res w (wordWidth dflags)
emitPrimOp _ [res] PopCnt8Op [w] = emitPopCntCall res w W8
emitPrimOp _ [res] PopCnt16Op [w] = emitPopCntCall res w W16
emitPrimOp _ [res] PopCnt32Op [w] = emitPopCntCall res w W32
emitPrimOp _ [res] PopCnt64Op [w] = emitPopCntCall res w W64
emitPrimOp dflags [res] PopCntOp [w] = emitPopCntCall res w (wordWidth dflags)
-- The rest just translate straightforwardly
emitPrimOp dflags [res] op [arg]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment