gotoInstrGen :: Special -> Int -> InstrM ()
gotoInstrGen special offset
  | offset >= 0 && offset <= 3 = return ()
  | outsideGotoRange offset = do
    gotoWInstr special
    writeBytes . packI32 $ offset
  | otherwise = do
    gotoInstr special
    writeBytes . packI16 $ offset
gotoInstrGen :: Special -> Int -> InstrM ()
gotoInstrGen special offset
  | offset >= 0 && offset <= 3 = return ()
  | outsideGotoRange offset = do
    gotoWInstr special
    writeBytes . packI32 $ offset
  | otherwise = do
    gotoInstr special
    writeBytes . packI16 $ offset
gotoInstrGen special offset
  | offset >= 0 && offset <= 3 = return ()
  | outsideGotoRange offset = do
    gotoWInstr special
    writeBytes . packI32 $ offset
  | otherwise = do
    gotoInstr special
    writeBytes . packI16 $ offset