+ | i# ==# 0# = I# x#
+ | i# >=# wsib = 0
+ | i# ># 0# = I# (x# `uncheckedIShiftL#` i#)
+ | i# <=# nwsib = I# (if x# <# 0# then -1# else 0#)
+ | otherwise = I# (x# `uncheckedIShiftRA#` negateInt# i#)
+ where
+ wsib = WORD_SIZE_IN_BITS# {- work around preprocessor problem (??) -}
+ nwsib = negateInt# wsib