cgOp LStrLen [s] = do
  ns <- unbox FString s
  len <- inst $ simpleCall "strlen" [ns]
  ws <- getWordSize
  len' <- case ws of
            32 -> return len
            x | x > 32 -> inst $ Trunc len (IntegerType 32) []
              | x < 32 -> inst $ ZExt len (IntegerType 32) []
  box (FArith (ATInt (ITFixed IT32))) len'
cgOp LStrLen [s] = do
  ns <- unbox FString s
  len <- inst $ simpleCall "strlen" [ns]
  ws <- getWordSize
  len' <- case ws of
            32 -> return len
            x | x > 32 -> inst $ Trunc len (IntegerType 32) []
              | x < 32 -> inst $ ZExt len (IntegerType 32) []
  box (FArith (ATInt (ITFixed IT32))) len'
cgOp LStrLen [s] = do
  ns <- unbox FString s
  len <- inst $ simpleCall "strlen" [ns]
  ws <- getWordSize
  len' <- case ws of
            32 -> return len
            x | x > 32 -> inst $ Trunc len (IntegerType 32) []
              | x < 32 -> inst $ ZExt len (IntegerType 32) []
  box (FArith (ATInt (ITFixed IT32))) len'