diff --git a/cabal.project b/cabal.project index 1ba410e0a..1f560acc1 100644 --- a/cabal.project +++ b/cabal.project @@ -1,4 +1,4 @@ packages: gibbon-compiler program-options - ghc-options: -Werror + ghc-options: diff --git a/gibbon-compiler/examples/tail_recursion/ConsListLength.hs b/gibbon-compiler/examples/tail_recursion/ConsListLength.hs new file mode 100644 index 000000000..a8b252302 --- /dev/null +++ b/gibbon-compiler/examples/tail_recursion/ConsListLength.hs @@ -0,0 +1,27 @@ +module ConsListLength where + + +data ConsIntList = Cons Int (ConsIntList) | Nil + + + +mkConsIntList :: Int -> ConsIntList +mkConsIntList len = if len <= 0 + then Nil + else let + rst = mkConsIntList (len-1) + in Cons len rst + + +length :: ConsIntList -> Int -> Int +length lst accum = case lst of + Nil -> accum + Cons x rst -> length rst (accum+1) + + + +gibbon_main = + let n = sizeParam + lst = mkConsIntList n + len = iterate (length lst 0) + in len \ No newline at end of file diff --git a/gibbon-compiler/examples/tail_recursion/Insertion.hs b/gibbon-compiler/examples/tail_recursion/Insertion.hs new file mode 100644 index 000000000..310898699 --- /dev/null +++ b/gibbon-compiler/examples/tail_recursion/Insertion.hs @@ -0,0 +1,71 @@ +module Insertion where + +import Gibbon.Vector + +isort2 :: (a -> a -> Int) -> Vector a -> Vector a +isort2 cmp xs = + let n = length xs + in go 1 n cmp (copy xs) + +go :: Int -> Int -> (a -> a -> Int) -> Vector a -> Vector a +go i n cmp ys = + if i == n + then ys + else let ys' = shift i cmp ys + in go (i+1) n cmp ys' + + +shift :: Int -> (a -> a -> Int) -> Vector a -> Vector a +shift j cmp ys = + if j == 0 + then ys + else let a = nth ys j + b = nth ys (j-1) + in if (cmp a b) > 0 + then ys + else let ys' = inplaceUpdate j b ys + ys'' = inplaceUpdate (j-1) a ys' + in shift (j-1) cmp ys'' + +-------------------------------------------------------------------------------- + +insert :: (a -> a -> Int) -> Vector a -> a -> Int -> Vector a +insert cmp xs x n = + if n == 0 + then inplaceUpdate 0 x xs + else let y = nth xs (n-1) + in if (cmp x y) < 0 + then let xs' = inplaceUpdate n y xs + in insert cmp xs' x (n-1) + else inplaceUpdate n x xs + +isort :: (a -> a -> Int) -> Vector a -> Vector a -> Int -> Vector a +isort cmp xs b n = + let len = length xs + in if len <= 1 + then xs + else if n == 0 + then b + else let xs' = isort cmp xs b (n-1) + in insert cmp xs' (nth xs n) n + +isort1 :: (a -> a -> Int) -> Vector a -> Vector a +isort1 cmp xs = + let n = length xs + hd = nth xs 0 + b :: Vector a + b = generate n (\i -> hd) + in isort cmp xs b ((length xs) - 1) + +-------------------------------------------------------------------------------- + +gibbon_main = + let n = sizeParam + ls :: Vector Int + ls = generate sizeParam (\i -> n-i) + + ls1 = isort1 compare_int ls + ls2 = isort2 compare_int ls + + _ = printVec (\i -> printint i) ls1 + in (ls1,ls2) \ No newline at end of file diff --git a/gibbon-compiler/examples/tail_recursion/Map.hs b/gibbon-compiler/examples/tail_recursion/Map.hs new file mode 100644 index 000000000..9382dc188 --- /dev/null +++ b/gibbon-compiler/examples/tail_recursion/Map.hs @@ -0,0 +1,43 @@ +module Map where + + +data ConsIntList = Cons Int (ConsIntList) | Nil + + +mkConsIntList :: Int -> ConsIntList +mkConsIntList len = if len <= 0 + then Nil + else let + rst = mkConsIntList (len-1) + in Cons len rst + + +map :: (Int -> Int) -> ConsIntList -> ConsIntList +map f lst = case lst of + Nil -> Nil + Cons x rst -> Cons (f x) (map f rst) + + + + +add1 :: Int -> Int +add1 x = x + 1 + +checkMapAdd1 :: ConsIntList -> ConsIntList -> Bool +checkMapAdd1 lst lst' = case lst of + Nil -> case lst' of + Nil -> True + _ -> False + Cons x rst -> case lst' of + Nil -> False + Cons x' rst' -> if (x' == x + 1) + then True && checkMapAdd1 rst rst' + else False + +gibbon_main = + let len = 10000000 + lst = mkConsIntList len + lst' = iterate (map add1 lst) + in checkMapAdd1 lst lst' + + diff --git a/gibbon-compiler/examples/tail_recursion/MapOnVector.hs b/gibbon-compiler/examples/tail_recursion/MapOnVector.hs new file mode 100644 index 000000000..15c865a8e --- /dev/null +++ b/gibbon-compiler/examples/tail_recursion/MapOnVector.hs @@ -0,0 +1,16 @@ +module MapOnVector where + +import Gibbon.Vector + +add1 :: Int -> Int +add1 x = x + 1 + + +gibbon_main = + let n = sizeParam + ls :: Vector Int + ls = generate sizeParam (\i -> n-i) + -- generate_loop is the recursive function to look at, if it is tail_recursive or not. + ls' = iterate (map add1 ls) + --_ = printVec (\i -> printint i) ls' + in (ls,ls') \ No newline at end of file diff --git a/gibbon-compiler/gibbon.cabal b/gibbon-compiler/gibbon.cabal index 6d09c0ae2..3db6b4d25 100644 --- a/gibbon-compiler/gibbon.cabal +++ b/gibbon-compiler/gibbon.cabal @@ -87,6 +87,7 @@ library Gibbon.Passes.RearrangeFree Gibbon.Passes.Codegen Gibbon.Passes.CalculateBounds + Gibbon.Passes.MarkTailCalls other-extensions: DeriveDataTypeable CPP diff --git a/gibbon-compiler/src/Gibbon/Compiler.hs b/gibbon-compiler/src/Gibbon/Compiler.hs index 9fab5a82f..23cdc439f 100644 --- a/gibbon-compiler/src/Gibbon/Compiler.hs +++ b/gibbon-compiler/src/Gibbon/Compiler.hs @@ -80,6 +80,7 @@ import Gibbon.Passes.RouteEnds (routeEnds) import Gibbon.Passes.FollowPtrs (followPtrs) import Gibbon.NewL2.FromOldL2 (fromOldL2) import Gibbon.Passes.ThreadRegions (threadRegions) +import Gibbon.Passes.MarkTailCalls (markTailCalls) import Gibbon.Passes.InferFunAllocs (inferFunAllocs) import Gibbon.Passes.Cursorize (cursorize) import Gibbon.Passes.FindWitnesses (findWitnesses) @@ -609,7 +610,7 @@ benchMainExp l1 = do (L1.ReadPackedFile benchInput tyc Nothing arg) []) $ L1.LetE (toVar "benchres", [], ret, - L1.AppE fnname [] [L1.VarE (toVar tmp)]) + L1.AppE (fnname, NoTail) [] [L1.VarE (toVar tmp)]) -- FIXME: should actually return the result, -- as soon as we are able to print it. (if gopt Opt_BenchPrint dynflags @@ -798,7 +799,7 @@ Also see Note [Adding dummy traversals] and Note [Adding random access nodes]. -- it adds regions to 'locs' in AppE and LetE which the -- typechecker doesn't know how to handle. l2' <- go "threadRegions" threadRegions l2' - + l2' <- go "markTailCalls" markTailCalls l2' -- L2 -> L3 -- TODO: Compose L3.TcM with (ReaderT Config) l3 <- go "cursorize" cursorize l2' diff --git a/gibbon-compiler/src/Gibbon/HaskellFrontend.hs b/gibbon-compiler/src/Gibbon/HaskellFrontend.hs index 8192da933..8329b1b8e 100644 --- a/gibbon-compiler/src/Gibbon/HaskellFrontend.hs +++ b/gibbon-compiler/src/Gibbon/HaskellFrontend.hs @@ -525,7 +525,7 @@ desugarExp type_syns toplevel e = pure $ VarE v -- Otherwise, 'v' is a top-level value binding, which we -- encode as a function which takes no arguments. - _ -> pure $ AppE v [] [] + _ -> pure $ AppE (v, NoTail) [] [] Nothing -> pure $ VarE v Lit _ lit -> desugarLiteral lit @@ -760,14 +760,14 @@ desugarExp type_syns toplevel e = pure $ Ext (LinearExt (LseqE e2' undefined)) else if S.member f keywords then error $ "desugarExp: Keyword not handled: " ++ sdoc f - else AppE f [] <$> (: []) <$> desugarExp type_syns toplevel e2 + else AppE (f, NoTail) [] <$> (: []) <$> desugarExp type_syns toplevel e2 (DataConE tyapp c as) -> (\e2' -> DataConE tyapp c (as ++ [e2'])) <$> desugarExp type_syns toplevel e2 (Ext (ParE0 ls)) -> do e2' <- desugarExp type_syns toplevel e2 pure $ Ext $ ParE0 (ls ++ [e2']) - (AppE f [] ls) -> do + (AppE (f, t) [] ls) -> do e2' <- desugarExp type_syns toplevel e2 - pure $ AppE f [] (ls ++ [e2']) + pure $ AppE (f, t) [] (ls ++ [e2']) (Ext (BenchE fn [] ls b)) -> do e2' <- desugarExp type_syns toplevel e2 @@ -805,9 +805,9 @@ desugarExp type_syns toplevel e = e2' <- desugarExp type_syns toplevel e2 pure (Ext (LinearExt (LseqE a e2'))) - (Ext (LinearExt (ToLinearE (AppE f [] ls)))) -> do + (Ext (LinearExt (ToLinearE (AppE (f, t) [] ls)))) -> do e2' <- desugarExp type_syns toplevel e2 - pure (Ext (LinearExt (ToLinearE (AppE f [] (ls ++ [e2']))))) + pure (Ext (LinearExt (ToLinearE (AppE (f, t) [] (ls ++ [e2']))))) (Ext (LinearExt (ToLinearE (DataConE tyapp dcon ls)))) -> do e2' <- desugarExp type_syns toplevel e2 @@ -819,7 +819,7 @@ desugarExp type_syns toplevel e = (Ext (LinearExt (ToLinearE (VarE fn)))) -> do e2' <- desugarExp type_syns toplevel e2 - pure (Ext (LinearExt (ToLinearE (AppE fn [] [e2'])))) + pure (Ext (LinearExt (ToLinearE (AppE (fn, NoTail) [] [e2'])))) f -> error ("desugarExp: Couldn't parse function application: (" ++ show f ++ ")") @@ -1226,7 +1226,7 @@ fixupSpawn ex = WithArenaE v e -> WithArenaE v (go e) SpawnE _ _ args -> case args of - [(AppE fn tyapps ls)] -> SpawnE fn tyapps ls + [(AppE (fn, _) tyapps ls)] -> SpawnE fn tyapps ls _ -> error $ "fixupSpawn: incorrect use of spawn: " ++ sdoc ex SyncE -> SyncE MapE{} -> error $ "fixupSpawn: TODO MapE" diff --git a/gibbon-compiler/src/Gibbon/L0/Interp.hs b/gibbon-compiler/src/Gibbon/L0/Interp.hs index fcf7d22c3..0bdf87ad6 100644 --- a/gibbon-compiler/src/Gibbon/L0/Interp.hs +++ b/gibbon-compiler/src/Gibbon/L0/Interp.hs @@ -25,7 +25,7 @@ instance InterpExt () Exp0 (E0Ext Ty0 Ty0) where Nothing -> error $ "L0.Interp: Unbound function reference: " ++ sdoc f Just fn -> pure $ VLam (funArgs fn) (funBody fn) M.empty BenchE fn locs args _b -> - gInterpExp rc valenv ddefs fundefs (AppE fn locs args) + gInterpExp rc valenv ddefs fundefs (AppE (fn, NoTail) locs args) ParE0 ls -> gInterpExp rc valenv ddefs fundefs (MkProdE ls) PrintPacked _ty _arg -> pure $ VProd [] CopyPacked _ty arg -> gInterpExp rc valenv ddefs fundefs arg diff --git a/gibbon-compiler/src/Gibbon/L0/Specialize2.hs b/gibbon-compiler/src/Gibbon/L0/Specialize2.hs index 4810cba9f..a89201971 100644 --- a/gibbon-compiler/src/Gibbon/L0/Specialize2.hs +++ b/gibbon-compiler/src/Gibbon/L0/Specialize2.hs @@ -465,11 +465,11 @@ collectMonoObls ddefs env2 toplevel ex = AppE f [] args -> do args' <- mapM (collectMonoObls ddefs env2 toplevel) args pure $ AppE f [] args' - AppE f tyapps args -> do + AppE (f, t) tyapps args -> do args' <- mapM (collectMonoObls ddefs env2 toplevel) args tyapps' <- mapM (monoOblsTy ddefs) tyapps f' <- addFnObl f tyapps' - pure $ AppE f' [] args' + pure $ AppE (f', t) [] args' LetE (v, [], ty@ArrowTy{}, rhs) bod ->do let env2' = (extendVEnv v ty env2) case rhs of @@ -996,7 +996,7 @@ specLambdasExp :: DDefs0 -> Env2 Ty0 -> Exp0 -> SpecM Exp0 specLambdasExp ddefs env2 ex = case ex of -- TODO, docs. - AppE f [] args -> do + AppE (f, t) [] args -> do args' <- mapM go args let args'' = dropFunRefs f env2 args' refs = foldr collectFunRefs [] args' @@ -1004,11 +1004,11 @@ specLambdasExp ddefs env2 ex = case refs of [] -> case M.lookup f (sp_extra_args sp_state) of - Nothing -> pure $ AppE f [] args'' + Nothing -> pure $ AppE (f, t) [] args'' Just extra_args -> do let (vars,_) = unzip extra_args args''' = args'' ++ map VarE vars - pure $ AppE f [] args''' + pure $ AppE (f, t) [] args''' _ -> do let extra_args = foldr (\fnref acc -> case M.lookup fnref (sp_extra_args sp_state) of @@ -1034,9 +1034,9 @@ specLambdasExp ddefs env2 ex = , sp_extra_args = sp_extra_args' } put sp_state' - pure $ AppE f' [] args''' - (Just f', _) -> pure $ AppE f' [] args''' - (_, Just f') -> pure $ AppE f' [] args''' + pure $ AppE (f', t) [] args''' + (Just f', _) -> pure $ AppE (f', t) [] args''' + (_, Just f') -> pure $ AppE (f', t) [] args''' AppE _ (_:_) _ -> error $ "specLambdasExp: Call-site not monomorphized: " ++ sdoc ex -- Float out a lambda fun to the top-level. @@ -1138,9 +1138,9 @@ specLambdasExp ddefs env2 ex = e' <- specLambdasExp ddefs (extendVEnv v ArenaTy env2) e pure $ WithArenaE v e' SpawnE fn tyapps args -> do - e' <- specLambdasExp ddefs env2 (AppE fn tyapps args) + e' <- specLambdasExp ddefs env2 (AppE (fn, NoTail) tyapps args) case e' of - AppE fn' tyapps' args' -> pure $ SpawnE fn' tyapps' args' + AppE (fn', _) tyapps' args' -> pure $ SpawnE fn' tyapps' args' _ -> error "specLambdasExp: SpawnE" SyncE -> pure SyncE MapE{} -> error $ "specLambdasExp: TODO: " ++ sdoc ex @@ -1174,7 +1174,7 @@ specLambdasExp ddefs env2 ex = , funCanTriggerGC = False } } - pure (Just fn, binds, AppE fnname [] (map VarE args)) + pure (Just fn, binds, AppE (fnname, NoTail) [] (map VarE args)) let mb_insert mb_fn mp = case mb_fn of Just fn -> M.insert (funName fn) fn mp Nothing -> mp @@ -1254,7 +1254,7 @@ specLambdasExp ddefs env2 ex = CharE{} -> acc FloatE{} -> acc LitSymE{} -> acc - AppE f _ args -> f : foldr collectAllFuns acc args + AppE (f, _) _ args -> f : foldr collectAllFuns acc args PrimAppE _ args -> foldr collectAllFuns acc args LetE (_,_,_, rhs) bod -> foldr collectAllFuns acc [bod, rhs] IfE a b c -> foldr collectAllFuns acc [c, b, a] @@ -1452,7 +1452,7 @@ desugarL0 (Prog ddefs fundefs' mainExp') = do spawns = init xs (a,b,c) = last xs ls' = foldr - (\(w,ty1,(AppE fn tyapps1 args)) acc -> + (\(w,ty1,(AppE (fn, NoTail) tyapps1 args)) acc -> (w,[],ty1,(SpawnE fn tyapps1 args)) : acc) [] spawns @@ -1539,17 +1539,17 @@ desugarL0 (Prog ddefs fundefs' mainExp') = do PrintPacked ty arg | (PackedTy tycon _) <- ty -> do let f = mkPrinterName tycon - pure $ AppE f [] [arg] + pure $ AppE (f, NoTail) [] [arg] | otherwise -> err1 $ "printPacked without a packed type. Got " ++ sdoc ty CopyPacked ty arg | (PackedTy tycon _) <- ty -> do let f = mkCopyFunName tycon - pure $ AppE f [] [arg] + pure $ AppE (f, NoTail) [] [arg] | otherwise -> err1 $ "printPacked without a packed type. Got " ++ sdoc ty TravPacked ty arg | (PackedTy tycon _) <- ty -> do let f = mkTravFunName tycon - pure $ AppE f [] [arg] + pure $ AppE (f, NoTail) [] [arg] | otherwise -> err1 $ "printPacked without a packed type. Got " ++ sdoc ty L p e -> Ext <$> (L p) <$> (go e) LinearExt{} -> err1 (sdoc ex) @@ -1583,7 +1583,7 @@ genCopyFn DDef{tyName, dataCons} = do -- let packed_vars = map fst $ filter (\(x,ty) -> isPackedTy ty) (zip ys tys) let bod = foldr (\(ty,x,y) acc -> case ty of - PackedTy tycon _ -> LetE (y, [], ty, AppE (mkCopyFunName tycon) [] [VarE x]) acc + PackedTy tycon _ -> LetE (y, [], ty, AppE (mkCopyFunName tycon, NoTail) [] [VarE x]) acc _ -> LetE (y, [], ty, VarE x) acc) (DataConE (ProdTy []) dcon $ map VarE ys) (zip3 tys xs ys) return (dcon, map (\x -> (x,(ProdTy []))) xs, bod) @@ -1607,7 +1607,7 @@ genCopySansPtrsFn DDef{tyName,dataCons} = do -- let packed_vars = map fst $ filter (\(x,ty) -> isPackedTy ty) (zip ys tys) let bod = foldr (\(ty,x,y) acc -> case ty of - PackedTy tycon _ -> LetE (y, [], ty, AppE (mkCopySansPtrsFunName tycon) [] [VarE x]) acc + PackedTy tycon _ -> LetE (y, [], ty, AppE (mkCopySansPtrsFunName tycon, NoTail) [] [VarE x]) acc _ -> LetE (y, [], ty, VarE x) acc) (DataConE (ProdTy []) dcon $ map VarE ys) (zip3 tys xs ys) return (dcon, map (\x -> (x,(ProdTy []))) xs, bod) @@ -1633,7 +1633,7 @@ genTravFn DDef{tyName, dataCons} = do ys <- mapM (\_ -> gensym "y") tys let bod = foldr (\(ty,x,y) acc -> case ty of - PackedTy tycon _ -> LetE (y, [], ProdTy [], AppE (mkTravFunName tycon) [] [VarE x]) acc + PackedTy tycon _ -> LetE (y, [], ProdTy [], AppE (mkTravFunName tycon, NoTail) [] [VarE x]) acc _ -> acc) (MkProdE []) (zip3 (map snd tys) xs ys) @@ -1662,7 +1662,7 @@ genPrintFn DDef{tyName, dataCons} = do FloatTy -> (y, [], ProdTy [], PrimAppE PrintFloat [VarE x]) : acc SymTy0 -> (y, [], ProdTy [], PrimAppE PrintSym [VarE x]) : acc BoolTy -> (y, [], ProdTy [], PrimAppE PrintBool [VarE x]) : acc - PackedTy tycon _ -> (y, [], ProdTy [], AppE (mkPrinterName tycon) [] [VarE x]) : acc + PackedTy tycon _ -> (y, [], ProdTy [], AppE (mkPrinterName tycon, NoTail) [] [VarE x]) : acc SymDictTy{} -> (y, [], ProdTy [], PrimAppE PrintSym [LitSymE (toVar "SymDict")]) : acc VectorTy{} -> (y, [], ProdTy [], PrimAppE PrintSym [LitSymE (toVar "Vector")]) : acc PDictTy{} -> (y, [], ProdTy [], PrimAppE PrintSym [LitSymE (toVar "PDict")]) : acc @@ -1744,7 +1744,7 @@ floatOutCase (Prog ddefs fundefs mainExp) = do args <- mapM (\x -> lift $ gensym x) free let ex' = foldr (\(from,to) acc -> gSubst from (VarE to) acc) ex (zip free args) let fn = FunDef fn_name args fn_ty ex' (FunMeta NotRec NoInline False) - state (\s -> ((AppE fn_name [] (map VarE free)), M.insert fn_name fn s)) + state (\s -> ((AppE (fn_name, NoTail) [] (map VarE free)), M.insert fn_name fn s)) go :: Bool -> Env2 Ty0 -> Exp0 -> FloatM Exp0 go float env2 ex = diff --git a/gibbon-compiler/src/Gibbon/L0/Syntax.hs b/gibbon-compiler/src/Gibbon/L0/Syntax.hs index 3a34a4657..b6885ad5d 100644 --- a/gibbon-compiler/src/Gibbon/L0/Syntax.hs +++ b/gibbon-compiler/src/Gibbon/L0/Syntax.hs @@ -503,7 +503,7 @@ recoverType ddfs env2 ex = CharE _ -> CharTy FloatE{} -> FloatTy LitSymE _ -> IntTy - AppE v tyapps _ -> let (ForAll tyvars (ArrowTy _ retty)) = fEnv env2 # v + AppE (v, _) tyapps _ -> let (ForAll tyvars (ArrowTy _ retty)) = fEnv env2 # v in substTyVar (M.fromList (fragileZip tyvars tyapps)) retty -- PrimAppE (DictInsertP ty) ((L _ (VarE v)):_) -> SymDictTy (Just v) ty -- PrimAppE (DictEmptyP ty) ((L _ (VarE v)):_) -> SymDictTy (Just v) ty diff --git a/gibbon-compiler/src/Gibbon/L0/Typecheck.hs b/gibbon-compiler/src/Gibbon/L0/Typecheck.hs index efae97749..476c6283a 100644 --- a/gibbon-compiler/src/Gibbon/L0/Typecheck.hs +++ b/gibbon-compiler/src/Gibbon/L0/Typecheck.hs @@ -111,7 +111,7 @@ tcExp ddefs sbst venv fenv bound_tyvars is_main ex = (\(a,b,c) -> (a,b,c)) <$> FloatE{} -> pure (sbst, FloatTy, ex) LitSymE{} -> pure (sbst, SymTy0, ex) - AppE f _tyapps args -> do + AppE (f, _) _tyapps args -> do (sigma, (metas, fn_ty_inst)) <- case (M.lookup f venv, M.lookup f fenv) of (Just lam_ty, _) -> (lam_ty,) <$> instantiate lam_ty @@ -134,7 +134,7 @@ tcExp ddefs sbst venv fenv bound_tyvars is_main ex = (\(a,b,c) -> (a,b,c)) <$> -- id 10 ===> id [Int] 10 let tyapps = map (zonkTy s3) metas s5 = s2 <> s3 <> s4 - pure (s5, zonkTy s5 fresh, AppE f tyapps (map (zonkExp s5) args_tc)) + pure (s5, zonkTy s5 fresh, AppE (f, NoTail) tyapps (map (zonkExp s5) args_tc)) PrimAppE pr args -> do (s1, arg_tys, args_tc) <- tcExps ddefs sbst venv fenv bound_tyvars (zip (repeat is_main) args) @@ -688,9 +688,9 @@ tcExp ddefs sbst venv fenv bound_tyvars is_main ex = (\(a,b,c) -> (a,b,c)) <$> Ext (BenchE fn tyapps args b) -> if is_main then do - (s1, ty, e') <- go (AppE fn tyapps args) + (s1, ty, e') <- go (AppE (fn, NoTail) tyapps args) case e' of - AppE fn' tyapps' args' -> + AppE (fn', _) tyapps' args' -> pure (s1, zonkTy s1 ty, Ext (BenchE fn' tyapps' args' b)) _ -> err $ text "BenchE" else err $ text "'bench' can only be used as a tail of the main expression." <+> exp_doc @@ -730,9 +730,9 @@ tcExp ddefs sbst venv fenv bound_tyvars is_main ex = (\(a,b,c) -> (a,b,c)) <$> pure (s1, ty', WithArenaE v e1') SpawnE fn tyapps args -> do - (s1, ty, e') <- tcExp ddefs sbst venv fenv bound_tyvars is_main (AppE fn tyapps args) + (s1, ty, e') <- tcExp ddefs sbst venv fenv bound_tyvars is_main (AppE (fn, NoTail) tyapps args) case e' of - AppE fn' tyapps' args' -> pure (s1, ty, SpawnE fn' tyapps' args') + AppE (fn', NoTail) tyapps' args' -> pure (s1, ty, SpawnE fn' tyapps' args') _ -> err $ text "SpawnE: not a saturated function" SyncE -> pure (sbst, ProdTy [], SyncE) diff --git a/gibbon-compiler/src/Gibbon/L1/Examples.hs b/gibbon-compiler/src/Gibbon/L1/Examples.hs index f55980f32..ce985a9a2 100644 --- a/gibbon-compiler/src/Gibbon/L1/Examples.hs +++ b/gibbon-compiler/src/Gibbon/L1/Examples.hs @@ -37,8 +37,8 @@ exadd1Bod = PrimAppE AddP [VarE "n", LitE 1]) , ("Node", [("x",()),("y",())], DataConE () "Node" - [ AppE "add1" [] [VarE "x"] - , AppE "add1" [] [VarE "y"]]) + [ AppE ("add1", NoTail) [] [VarE "x"] + , AppE ("add1", NoTail) [] [VarE "y"]]) ] exadd1BodLetLeft :: Exp1 @@ -46,8 +46,8 @@ exadd1BodLetLeft = CaseE (VarE "tr") $ [ ("Leaf", [("n",())], PrimAppE AddP [VarE "n", LitE 1]) , ("Node", [("x",()),("y",())], - LetE ("x2",[], treeTy, AppE "add1" [] [VarE "x"]) $ - LetE ("y2",[], treeTy, AppE "add1" [] [VarE "y"]) $ + LetE ("x2",[], treeTy, AppE ("add1", NoTail) [] [VarE "x"]) $ + LetE ("y2",[], treeTy, AppE ("add1", NoTail) [] [VarE "y"]) $ DataConE () "Node" [ VarE "x2", VarE "y2"]) ] @@ -58,8 +58,8 @@ exadd1BodLetRight = CaseE (VarE "tr") $ [ ("Leaf", [("n",())], PrimAppE AddP [VarE "n", LitE 1]) , ("Node", [("x",()),("y",())], - LetE ("y2",[], treeTy, AppE "add1" [] [VarE "y"]) $ - LetE ("x2",[], treeTy, AppE "add1" [] [VarE "x"]) $ + LetE ("y2",[], treeTy, AppE ("add1", NoTail) [] [VarE "y"]) $ + LetE ("x2",[], treeTy, AppE ("add1", NoTail) [] [VarE "x"]) $ DataConE () "Node" [ VarE "x2", VarE "y2"]) ] @@ -90,11 +90,11 @@ add1ProgChallenge = CaseE (VarE "tr") $ [ ("Leaf", [("n",())], PrimAppE AddP [VarE "n", LitE 1]) , ("Node", [("x",()),("y",())], - LetE ("y2",[], treeTy, AppE "add1" [] [VarE "y"]) $ + LetE ("y2",[], treeTy, AppE ("add1", NoTail) [] [VarE "y"]) $ LetE ("x2",[], treeTy, - (IfE (AppE "pred" [] [VarE "y2"]) - (AppE "add1" [] [VarE "x"]) - (AppE "add1" [] [VarE "x"]))) $ + (IfE (AppE ("pred", NoTail) [] [VarE "y2"]) + (AppE ("add1", NoTail) [] [VarE "x"]) + (AppE ("add1", NoTail) [] [VarE "x"]))) $ DataConE () "Node" [ VarE "x2", VarE "y2"]) ] @@ -106,6 +106,6 @@ add1ProgSharing = Prog treeDD (M.fromList [("add1",mkAdd1Fun bod)]) Nothing CaseE (VarE "tr") $ [ ("Leaf", [("n",())], PrimAppE AddP [VarE "n", LitE 1]) , ("Node", [("x",()),("y",())], - LetE ("x2",[], treeTy, AppE "add1" [] [VarE "x"]) $ + LetE ("x2",[], treeTy, AppE ("add1", NoTail) [] [VarE "x"]) $ DataConE () "Node" [ VarE "x2", VarE "x2"]) ] diff --git a/gibbon-compiler/src/Gibbon/L1/GenSML.hs b/gibbon-compiler/src/Gibbon/L1/GenSML.hs index 1c06a7e5d..5c648e004 100644 --- a/gibbon-compiler/src/Gibbon/L1/GenSML.hs +++ b/gibbon-compiler/src/Gibbon/L1/GenSML.hs @@ -29,7 +29,7 @@ ppE e0 = case e0 of CharE c -> char c FloatE x -> double x LitSymE var -> doubleQuotes $ ppVar var - AppE var _ pes -> ppAp (ppVar var) pes + AppE (var, _) _ pes -> ppAp (ppVar var) pes PrimAppE pr pes -> ppPrim pr pes LetE (v, _, _, e) pe' -> hsep @@ -492,7 +492,7 @@ varsE :: Set.Set String -> Exp1 -> Set.Set String varsE vs pe0 = case pe0 of -- VarE var -> collect var VarE _ -> mempty - AppE var _ pes -> vpes pes <> collect var + AppE (var, _) _ pes -> vpes pes <> collect var PrimAppE _ pes -> vpes pes LetE (_, _, _, pe') pe -> vpe pe <> vpe pe' IfE pe pe' pe3 -> vpes [pe, pe', pe3] diff --git a/gibbon-compiler/src/Gibbon/L1/Interp.hs b/gibbon-compiler/src/Gibbon/L1/Interp.hs index bad9dae4f..35c320f0c 100644 --- a/gibbon-compiler/src/Gibbon/L1/Interp.hs +++ b/gibbon-compiler/src/Gibbon/L1/Interp.hs @@ -33,7 +33,7 @@ interpChatter = 7 instance InterpExt () Exp1 (E1Ext () Ty1) where gInterpExt rc valenv ddefs fundefs ex = case ex of - BenchE fn locs args _b -> interp rc valenv ddefs fundefs (AppE fn locs args) + BenchE fn locs args _b -> interp rc valenv ddefs fundefs (AppE (fn, NoTail) locs args) AddFixed{} -> error "L1.Interp: AddFixed not handled." StartOfPkdCursor{} -> error "L1.Interp: StartOfPkdCursor not handled." @@ -95,7 +95,7 @@ interp rc valenv ddefs fenv = go valenv return $ ls !!! ix -- N.B. this AppE is shared by the interpreters for L0 and L1 - AppE f _ ls -> do + AppE (f, _) _ ls -> do ls' <- mapM (go env) ls -- Look in the local environment first case M.lookup f env of @@ -159,7 +159,7 @@ interp rc valenv ddefs fenv = go valenv else tell$ string8 $ "SELFTIMED: "++show tm ++"\n" return $! val - SpawnE f locs args -> go env (AppE f locs args) + SpawnE f locs args -> go env (AppE (f, NoTail) locs args) SyncE -> pure $ VInt (-1) WithArenaE v e -> do diff --git a/gibbon-compiler/src/Gibbon/L1/Typecheck.hs b/gibbon-compiler/src/Gibbon/L1/Typecheck.hs index 517f25f8a..3febc81b3 100644 --- a/gibbon-compiler/src/Gibbon/L1/Typecheck.hs +++ b/gibbon-compiler/src/Gibbon/L1/Typecheck.hs @@ -40,7 +40,7 @@ tcExp ddfs env exp = FloatE{} -> return FloatTy LitSymE _ -> return SymTy - AppE v locs ls -> do + AppE (v, _) locs ls -> do let funty = case (M.lookup v (fEnv env)) of Just ty -> ty @@ -658,7 +658,7 @@ tcExp ddfs env exp = return ty SpawnE v locs ls -> do - ty <- go (AppE v locs ls) + ty <- go (AppE (v, _) locs ls) if isScalarTy ty || isPackedTy ty then pure ty else case ty of @@ -677,7 +677,7 @@ tcExp ddfs env exp = tcExp ddfs env' e Ext (BenchE fn tyapps args _b) -> do - go (AppE fn tyapps args) + go (AppE (fn, _) tyapps args) Ext (AddFixed{}) -> pure CursorTy diff --git a/gibbon-compiler/src/Gibbon/L2/Examples.hs b/gibbon-compiler/src/Gibbon/L2/Examples.hs index ce91d54c0..f51e3a0c4 100644 --- a/gibbon-compiler/src/Gibbon/L2/Examples.hs +++ b/gibbon-compiler/src/Gibbon/L2/Examples.hs @@ -74,9 +74,9 @@ add1FunBod = CaseE (VarE "tr1") , ("Node", [("x9","l10"),("y11","l12")], Ext $ LetLocE "l13" (AfterConstantLE 1 "lout4") $ LetE ("x14",[],PackedTy "Tree" "l13", - AppE "add1" ["l10","l13"] [VarE "x9"]) $ + AppE ("add1", NoTail) ["l10","l13"] [VarE "x9"]) $ Ext $ LetLocE "l15" (AfterVariableLE "x14" "l13" True) $ - LetE ("y16",[],PackedTy "Tree" "l15", AppE "add1" ["l12","l15"] [VarE "y11"]) $ + LetE ("y16",[],PackedTy "Tree" "l15", AppE ("add1", NoTail) ["l12","l15"] [VarE "y11"]) $ LetE ("z17",[],PackedTy "Tree" "lout4", DataConE "lout4" "Node" [ VarE "x14" , VarE "y16"]) $ VarE "z17") @@ -97,7 +97,7 @@ add1MainExp = Ext $ LetRegionE (VarR "r99") Undefined Nothing $ Ext $ LetRegionE (VarR "r106") Undefined Nothing $ Ext $ LetLocE "l107" (StartOfRegionLE (VarR "r106")) $ LetE ("a108",[], PackedTy "Tree" "l107", - AppE "add1" ["l100", "l107"] [VarE "z105"]) $ + AppE ("add1", NoTail) ["l100", "l107"] [VarE "z105"]) $ VarE "a108" @@ -180,10 +180,10 @@ copyTreeFun = FunDef "copyTree" ["tr22"] copyFunTy copyBod (FunMeta NotRec NoInl , ("Node", [("x29","lx30"),("y31","ly32")], Ext $ LetLocE "lx33" (AfterConstantLE 1 "lout25") $ LetE ("x34", [], PackedTy "Tree" "lx33", - AppE "copyTree" ["lx30","lx33"] [VarE "x29"]) $ + AppE ("copyTree", NoTail) ["lx30","lx33"] [VarE "x29"]) $ Ext $ LetLocE "ly35" (AfterVariableLE "x34" "lx33" True) $ LetE ("y36", [], PackedTy "Tree" "ly35", - AppE "copyTree" ["ly32","ly35"] [VarE "y31"]) $ + AppE ("copyTree", NoTail) ["ly32","ly35"] [VarE "y31"]) $ DataConE "lout25" "Node" [VarE "x34", VarE "y36"]) ] @@ -201,7 +201,7 @@ copyTreeMainExp = Ext $ LetRegionE (VarR "r200") Undefined Nothing $ Ext $ LetRegionE (VarR "r207") Undefined Nothing $ Ext $ LetLocE "l208" (StartOfRegionLE (VarR "r207")) $ LetE ("a209",[], PackedTy "Tree" "l208", - AppE "copyTree" ["l201", "l208"] [VarE "z206"]) $ + AppE ("copyTree", NoTail) ["l201", "l208"] [VarE "z206"]) $ VarE "a209" copyTreeProg :: Prog2 @@ -251,11 +251,11 @@ copyOnId1MainExp = Ext $ LetRegionE (VarR "r220") Undefined Nothing $ Ext $ LetRegionE (VarR "r227") Undefined Nothing $ Ext $ LetLocE "l228" (StartOfRegionLE (VarR "r227")) $ LetE ("a229",[], PackedTy "Tree" "l228", - AppE "id1WithCopy" ["l221", "l228"] [VarE "z226"]) $ + AppE ("id1WithCopy", NoTail) ["l221", "l228"] [VarE "z226"]) $ VarE "a229" id1WithCopyFun :: FunDef2 -id1WithCopyFun = id1Fun { funBody = AppE "copyTree" ["lin19","lout21"] +id1WithCopyFun = id1Fun { funBody = AppE ("copyTree", NoTail) ["lin19","lout21"] [VarE "tr18"] , funName = "id1WithCopy" } @@ -273,10 +273,11 @@ id3Fun = FunDef "id3" ["i42"] id3Ty id3Bod (FunMeta NotRec NoInline False) (IntTy) [] False + id3Bod = VarE "i42" id3MainExp :: Exp2 -id3MainExp = AppE "id3" [] [LitE 42] +id3MainExp = AppE ("id3", NoTail) [] [LitE 42] id3Prog :: Prog2 id3Prog = Prog ddtree (M.fromList [("id3", id3Fun)]) $ Just (id3MainExp, IntTy) @@ -295,11 +296,12 @@ intAddFun = FunDef "intAdd" ["i109"] intAddTy id3Bod (FunMeta NotRec NoInline Fa (IntTy) [] False + id3Bod = PrimAppE AddP [ProjE 0 (VarE "i109"), ProjE 1 (VarE "i109")] intAddMainExp :: Exp2 intAddMainExp = LetE ("sum110", [], IntTy, - AppE "intAdd" [] + AppE ("intAdd", NoTail) [] [MkProdE [LitE 40,LitE 2]]) (VarE "sum110") @@ -325,7 +327,7 @@ leftmostBod = CaseE (VarE "t111") [("Leaf", [("n114","l115")], VarE "n114"), ("Node", [("x117","l118"), ("y119","l120")], - LetE ("lm121",[],IntTy, AppE "leftmost" ["l118"] [VarE "x117"]) $ + LetE ("lm121",[],IntTy, AppE ("leftmost", NoTail) ["l118"] [VarE "x117"]) $ VarE "lm121")] leftmostMainExp :: Exp2 @@ -340,7 +342,7 @@ leftmostMainExp = Ext $ LetRegionE (VarR "r122") Undefined Nothing $ LetE ("z127",[],PackedTy "Tree" "l123", DataConE "l123" "Node" [VarE "x125", VarE "y128"]) $ LetE ("a131",[], IntTy, - AppE "leftmost" ["l123"] [VarE "z127"]) $ + AppE ("leftmost", NoTail) ["l123"] [VarE "z127"]) $ VarE "a131" leftmostProg :: Prog2 @@ -370,7 +372,7 @@ rightmostBod = CaseE (VarE "t242") -- Ext $ LetLocE "l253" (StartOfRegionLE (VarR "r252")) $ -- LetE ("x254",[],PackedTy "Tree" "l253", -- AppE "copyTree" ["l249", "l253"] (VarE "x248")) $ - AppE "rightmost" ["l251"] [VarE "y250"] + AppE ("rightmost", NoTail) ["l251"] [VarE "y250"] )] rightmostMainExp :: Exp2 @@ -385,7 +387,7 @@ rightmostMainExp = Ext $ LetRegionE (VarR "r253") Undefined Nothing $ LetE ("z259",[],PackedTy "Tree" "l254", DataConE "l254" "Node" [VarE "x256", VarE "y258"]) $ LetE ("a260",[], IntTy, - AppE "rightmost" ["l254"] [VarE "z259"]) $ + AppE ("rightmost", NoTail) ["l254"] [VarE "z259"]) $ VarE "a260" rightmostProg :: Prog2 @@ -414,7 +416,7 @@ buildLeafFun = FunDef "buildLeaf" ["i125"] buildLeafTy buildLeafBod (FunMeta Rec buildLeafMainExp :: Exp2 buildLeafMainExp = Ext $ LetRegionE (VarR "r128") Undefined Nothing $ Ext $ LetLocE "l129" (StartOfRegionLE (VarR "r128")) $ - AppE "buildLeaf" ["l129"] [LitE 42] + AppE ("buildLeaf", NoTail) ["l129"] [LitE 42] buildLeafProg :: Prog2 buildLeafProg = Prog ddtree (M.fromList [("buildLeaf", buildLeafFun)]) (Just (buildLeafMainExp, PackedTy "Tree" "l129")) @@ -441,10 +443,10 @@ buildTreeFun = FunDef "buildTree" ["i270"] buildTreeTy buildTreeBod (FunMeta Rec (LetE ("i273",[], IntTy, PrimAppE SubP [VarE "i270", LitE 1]) $ Ext $ LetLocE "l274" (AfterConstantLE 1 "lout272") $ LetE ("x275",[],PackedTy "Tree" "l274", - AppE "buildTree" ["l274"] [VarE "i273"]) $ + AppE ("buildTree", NoTail) ["l274"] [VarE "i273"]) $ Ext $ LetLocE "l276" (AfterVariableLE "x275" "l274" True) $ LetE ("y277",[],PackedTy "Tree" "l276", - AppE "buildTree" ["l276"] [VarE "i273"]) $ + AppE ("buildTree", NoTail) ["l276"] [VarE "i273"]) $ LetE ("a278",[],PackedTy "Tree" "lout272", DataConE "lout272" "Node" [VarE "x275", VarE "y277"]) $ VarE "a278") @@ -453,7 +455,7 @@ buildTreeFun = FunDef "buildTree" ["i270"] buildTreeTy buildTreeBod (FunMeta Rec buildTreeMainExp :: Exp2 buildTreeMainExp = Ext $ LetRegionE (VarR "r279") Undefined Nothing $ Ext $ LetLocE "l280" (StartOfRegionLE (VarR "r279")) $ - AppE "buildTree" ["l280"] [LitE 3] + AppE ("buildTree", NoTail) ["l280"] [LitE 3] buildTreeProg :: Prog2 buildTreeProg = Prog ddtree (M.fromList [("buildTree", buildTreeFun)]) (Just (buildTreeMainExp, PackedTy "Tree" "l280")) @@ -476,9 +478,9 @@ buildTwoTreesFun = FunDef "buildTwoTrees" ["i750"] buildTreeTy buildTreeBod (Fun buildTreeBod :: Exp2 buildTreeBod = LetE ("tree1",[],PackedTy "Tree" "lout752", - AppE "buildTree" ["lout752"] [VarE "i750"]) $ + AppE ("buildTree", NoTail) ["lout752"] [VarE "i750"]) $ LetE ("tree2",[],PackedTy "Tree" "lout754", - AppE "buildTree" ["lout754"] [VarE "i750"]) $ + AppE ("buildTree", NoTail) ["lout754"] [VarE "i750"]) $ LetE ("a755",[], ProdTy [PackedTy "Tree" "lout752", PackedTy "Tree" "lout754"], MkProdE [VarE "tree1", VarE "tree2"]) $ VarE "a755" @@ -489,7 +491,7 @@ buildTwoTreesMainExp = Ext $ LetRegionE (VarR "r756") Undefined Nothing $ Ext $ LetRegionE (VarR "r758") Undefined Nothing $ Ext $ LetLocE "l759" (StartOfRegionLE (VarR "r758")) $ LetE ("treeprod", [], ProdTy [PackedTy "Tree" "lout757", PackedTy "Tree" "lout759"], - AppE "buildTwoTrees" ["l757", "l759"] [LitE 2]) $ + AppE ("buildTwoTrees", NoTail) ["l757", "l759"] [LitE 2]) $ VarE "treeprod" buildTwoTreesProg :: Prog2 @@ -522,12 +524,12 @@ buildTreeSumFun = FunDef "buildTreeSum" ["i302"] buildTreeSumTy buildTreeSumBod (LetE ("i303",[], IntTy, PrimAppE SubP [VarE "i302", LitE 1]) $ Ext $ LetLocE "l304" (AfterConstantLE 1 "lout301") $ LetE ("t318",[],ProdTy [IntTy, PackedTy "Tree" "l304"], - AppE "buildTreeSum" ["l304"] [VarE "i303"]) $ + AppE ("buildTreeSum", NoTail) ["l304"] [VarE "i303"]) $ LetE ("i309",[],IntTy, ProjE 0 (VarE "t318")) $ LetE ("x305",[],PackedTy "Tree" "l304", ProjE 1 (VarE "t318")) $ Ext $ LetLocE "l306" (AfterVariableLE "x305" "l304" True) $ LetE ("t319",[],ProdTy [IntTy, PackedTy "Tree" "l306"], - AppE "buildTreeSum" ["l306"] [VarE "i303"]) $ + AppE ("buildTreeSum", NoTail) ["l306"] [VarE "i303"]) $ LetE ("i310",[],IntTy, ProjE 0 (VarE "t319")) $ LetE ("y307",[],PackedTy "Tree" "l306", ProjE 1 (VarE "t319")) $ LetE ("j311",[],IntTy, PrimAppE AddP [VarE "i309", VarE "i310"]) $ @@ -542,7 +544,7 @@ buildTreeSumMainExp :: Exp2 buildTreeSumMainExp = Ext $ LetRegionE (VarR "r313") Undefined Nothing $ Ext $ LetLocE "l314" (StartOfRegionLE (VarR "r313")) $ LetE ("z315",[],ProdTy [IntTy, PackedTy "Tree" "l314"], - AppE "buildTreeSum" ["l314"] [LitE 3]) $ + AppE ("buildTreeSum", NoTail) ["l314"] [LitE 3]) $ VarE "z315" @@ -569,9 +571,9 @@ sumTreeFun = FunDef "sumTree" ["tr762"] sumTreeTy sumTreeBod (FunMeta Rec NoInli VarE "n763") , ("Node", [("x764","l765"), ("y766","l767")], LetE ("sx768", [], IntTy, - AppE "sumTree" ["l765"] [VarE "x764"]) $ + AppE ("sumTree", NoTail) ["l765"] [VarE "x764"]) $ LetE ("sy769", [], IntTy, - AppE "sumTree" ["l767"] [VarE "y766"]) $ + AppE ("sumTree", NoTail) ["l767"] [VarE "y766"]) $ LetE ("total770", [], IntTy , PrimAppE AddP [VarE "sx768", VarE "sy769"]) $ VarE "total770" @@ -581,9 +583,9 @@ sumTreeMainExp :: Exp2 sumTreeMainExp = Ext $ LetRegionE (VarR "r771") Undefined Nothing $ Ext $ LetLocE "l772" (StartOfRegionLE (VarR "r771")) $ LetE ("tr773", [], PackedTy "Tree" "l772", - AppE "buildTree" ["l772"] [LitE 3]) $ + AppE ("buildTree", NoTail) ["l772"] [LitE 3]) $ LetE ("sum774", [], IntTy, - AppE "sumTree" ["l772"] [VarE "tr773"]) $ + AppE ("sumTree", NoTail) ["l772"] [VarE "tr773"]) $ VarE "sum774" sumTreeProg :: Prog2 @@ -613,10 +615,10 @@ printTupMainExp2 :: Exp2 printTupMainExp2 = Ext $ LetRegionE (VarR "r400") Undefined Nothing $ Ext $ LetLocE "l401" (StartOfRegionLE (VarR "r400")) $ LetE ("x402",[], PackedTy "Tree" "l401", - AppE "buildTree" ["l401"] [LitE 2]) $ + AppE ("buildTree", NoTail) ["l401"] [LitE 2]) $ Ext $ LetLocE "l403" (AfterVariableLE "x402" "l401" True) $ LetE ("y404",[], PackedTy "Tree" "l403", - AppE "buildTree" ["l403"] [LitE 1]) $ + AppE ("buildTree", NoTail) ["l403"] [LitE 1]) $ LetE ("z405",[], ProdTy [PackedTy "Tree" "l401", PackedTy "Tree" "l403"], MkProdE [VarE "x402", VarE "y404"]) $ VarE "z405" @@ -646,8 +648,8 @@ addTreesFun = FunDef "addTrees" ["trees354"] addTreesTy addTreesBod (FunMeta Rec where addTreesTy :: ArrowTy2 Ty2 addTreesTy = ArrowTy2 - [LRM "lin351" (VarR "r350") Input, - LRM "lin352" (VarR "r351") Input, + [LRM "lin351" (VarR "r350") Input , + LRM "lin352" (VarR "r351") Input , LRM "lout353" (VarR "r754") Output] [ProdTy [PackedTy "Tree" "lin351", PackedTy "Tree" "lin352"]] (S.empty) @@ -678,13 +680,13 @@ addTreesFun = FunDef "addTrees" ["trees354"] addTreesTy addTreesBod (FunMeta Rec PackedTy "Tree" "l365"], MkProdE [VarE "x360", VarE "x364"]) $ LetE ("x369",[],PackedTy "Tree" "l368", - AppE "addTrees" ["l361","l365","l368"] [VarE "tree3"]) $ + AppE ("addTrees", NoTail) ["l361","l365","l368"] [VarE "tree3"]) $ Ext $ LetLocE "l370" (AfterVariableLE "x369" "l368" True) $ LetE ("tree4",[],ProdTy [PackedTy "Tree" "l363", PackedTy "Tree" "l367"], MkProdE [VarE "y362", VarE "y366"]) $ LetE ("y371",[],PackedTy "Tree" "l370", - AppE "addTrees" ["l363","l367","l370"] [VarE "tree4"]) $ + AppE ("addTrees", NoTail) ["l363","l367","l370"] [VarE "tree4"]) $ LetE ("z372",[],PackedTy "Tree" "lout353", DataConE "lout353" "Node" [VarE "x369", VarE "y371"]) $ VarE "z372" @@ -695,18 +697,18 @@ addTreesMainExp :: Exp2 addTreesMainExp = Ext $ LetRegionE (VarR "r400") Undefined Nothing $ Ext $ LetLocE "l401" (StartOfRegionLE (VarR "r400")) $ LetE ("x402",[], PackedTy "Tree" "l401", - AppE "buildTree" ["l401"] [LitE 2]) $ + AppE ("buildTree", NoTail) ["l401"] [LitE 2]) $ -- Ext $ LetLocE "l403" (AfterVariableLE "x402" "l401" True) $ Ext $ LetRegionE (VarR "r403") Undefined Nothing $ Ext $ LetLocE "l403" (StartOfRegionLE (VarR "r403")) $ LetE ("y404",[], PackedTy "Tree" "l403", - AppE "buildTree" ["l403"] [LitE 2]) $ + AppE ("buildTree", NoTail) ["l403"] [LitE 2]) $ LetE ("z405",[], ProdTy [PackedTy "Tree" "l401", PackedTy "Tree" "l403"], MkProdE [VarE "x402", VarE "y404"]) $ Ext $ LetRegionE (VarR "r405") Undefined Nothing $ Ext $ LetLocE "l406" (StartOfRegionLE (VarR "r405")) $ LetE ("a407",[],PackedTy "Tree" "l406", - AppE "addTrees" ["l401","l403","l406"] [VarE "z405"]) $ + AppE ("addTrees", NoTail) ["l401","l403","l406"] [VarE "z405"]) $ VarE "a407" addTreesProg :: Prog2 @@ -726,6 +728,7 @@ testProdFun = FunDef "testprod" ["tup130"] testprodTy testprodBod (FunMeta Rec N (ProdTy [(PackedTy "Tree" "lout133"), IntTy]) [] False + testprodBod = LetE ("t134",[], PackedTy "Tree" "lin131", ProjE 0 (VarE "tup130")) $ LetE ("i135",[], IntTy, ProjE 1 (VarE "tup130")) $ CaseE (VarE "t134") @@ -740,13 +743,13 @@ testProdFun = FunDef "testprod" ["tup130"] testprodTy testprodBod (FunMeta Rec N ("Node",[("x140","l141"), ("y142","l143")], Ext $ LetLocE "l144" (AfterConstantLE 1 "lout133") $ LetE ("tup145",[], ProdTy [PackedTy "Tree" "l144", IntTy], - AppE "testprod" ["l141","l144"] + AppE ("testprod", NoTail) ["l141","l144"] [MkProdE [VarE "x140", VarE "i135"]]) $ LetE ("x149",[], PackedTy "Tree" "l144", ProjE 0 (VarE "tup145")) $ Ext $ LetLocE "l146" (AfterVariableLE "x149" "l144" True) $ LetE ("tup147",[], ProdTy [PackedTy "Tree" "l146", IntTy], - AppE "testprod" ["l143","l146"] + AppE ("testprod", NoTail) ["l143","l146"] [MkProdE [VarE "y142", VarE "i135"]]) $ LetE ("y150",[], PackedTy "Tree" "l146", ProjE 0 (VarE "tup147")) $ LetE ("node151",[], PackedTy "Tree" "lout133", @@ -772,7 +775,7 @@ testFlattenProg = Prog M.empty (M.fromList [("intAdd",intAddFun)]) $ Just (testF Ext $ LetLocE "_" (AfterConstantLE 1 "_") $ LetE ("v170",[],IntTy, LetE ("v171",[],IntTy, - AppE "intAdd" [] + AppE ("intAdd", NoTail) [] [MkProdE [PrimAppE AddP [LitE 40, LitE 2], PrimAppE SubP [LitE 44, LitE 2]]]) $ VarE "v171") $ @@ -821,7 +824,6 @@ sumUpFun = FunDef "sumUp" ["tr1"] sumUpFunTy sumUpFunBod (FunMeta Rec NoInline F [] False - sumUpFunBod :: Exp2 sumUpFunBod = CaseE (VarE "tr1") [ ("Leaf", [("n503","l504")], @@ -834,12 +836,12 @@ sumUpFun = FunDef "sumUp" ["tr1"] sumUpFunTy sumUpFunBod (FunMeta Rec NoInline F Ext $ LetLocE "l550" (AfterVariableLE "i506" "l514" True) $ Ext $ LetLocE "l551" (AfterVariableLE "b508" "l550" True) $ LetE ("x515",[],PackedTy "STree" "l551", - AppE "sumUp" ["l511","l551"] [VarE "x510"]) $ + AppE ("sumUp", NoTail) ["l511","l551"] [VarE "x510"]) $ Ext $ LetLocE "l516" (AfterVariableLE "x515" "l551" True) $ LetE ("y517",[],PackedTy "STree" "l516", - AppE "sumUp" ["l513","l516"] [VarE "y512"]) $ - LetE ("v518",[],IntTy, AppE "valueSTree" ["l551"] [VarE "x515"]) $ - LetE ("v519",[],IntTy, AppE "valueSTree" ["l516"] [VarE "y517"]) $ + AppE ("sumUp", NoTail) ["l513","l516"] [VarE "y512"]) $ + LetE ("v518",[],IntTy, AppE ("valueSTree", NoTail) ["l551"] [VarE "x515"]) $ + LetE ("v519",[],IntTy, AppE ("valueSTree", NoTail) ["l516"] [VarE "y517"]) $ LetE ("v520",[],IntTy, PrimAppE AddP [VarE "v518", VarE "v519"]) $ LetE ("z521",[],PackedTy "STree" "lout502", DataConE "lout502" "Inner" [VarE "v520", VarE "b508", @@ -893,10 +895,10 @@ buildSTreeFun = FunDef "buildSTree" ["i543"] buildSTreeTy buildSTreeBod (FunMeta Ext $ LetLocE "l552" (AfterVariableLE "i554" "l544" True) $ Ext $ LetLocE "l553" (AfterVariableLE "b555" "l552" True) $ LetE ("x545",[],PackedTy "STree" "l553", - AppE "buildSTree" ["l553"] [VarE "i548"]) $ + AppE ("buildSTree", NoTail) ["l553"] [VarE "i548"]) $ Ext $ LetLocE "l545" (AfterVariableLE "x545" "l553" True) $ LetE ("y546",[],PackedTy "STree" "l545", - AppE "buildSTree" ["l545"] [VarE "i548"]) $ + AppE ("buildSTree", NoTail) ["l545"] [VarE "i548"]) $ LetE ("a547",[],PackedTy "STree" "lout541", DataConE "lout541" "Inner" [VarE "i554", VarE "b555", VarE "x545", VarE "y546"]) $ @@ -907,7 +909,7 @@ buildSTreeMainExp :: Exp2 buildSTreeMainExp = Ext $ LetRegionE (VarR "r530") Undefined Nothing $ Ext $ LetLocE "l531" (StartOfRegionLE (VarR "r530")) $ LetE ("x532",[], PackedTy "STree" "l531", - AppE "buildSTree" ["l531"] [LitE 3]) $ + AppE ("buildSTree", NoTail) ["l531"] [LitE 3]) $ VarE "x532" @@ -937,9 +939,9 @@ sumSTreeFun = FunDef "sumSTree" ["tr762"] sumSTreeTy sumSTreeBod (FunMeta Rec No , ("Inner", [("i775","l776"),("b777","l778"), ("x764","l765"), ("y766","l767")], LetE ("sx768", [], IntTy, - AppE "sumSTree" ["l765"] [VarE "x764"]) $ + AppE ("sumSTree", NoTail) ["l765"] [VarE "x764"]) $ LetE ("sy769", [], IntTy, - AppE "sumSTree" ["l767"] [VarE "y766"]) $ + AppE ("sumSTree", NoTail) ["l767"] [VarE "y766"]) $ LetE ("total770", [], IntTy , PrimAppE AddP [VarE "sx768", VarE "sy769"]) $ VarE "total770" @@ -949,9 +951,9 @@ sumSTreeMainExp :: Exp2 sumSTreeMainExp = Ext $ LetRegionE (VarR "r771") Undefined Nothing $ Ext $ LetLocE "l772" (StartOfRegionLE (VarR "r771")) $ LetE ("tr773", [], PackedTy "STree" "l772", - AppE "buildSTree" ["l772"] [LitE 3]) $ + AppE ("buildSTree", NoTail) ["l772"] [LitE 3]) $ LetE ("sum774", [], IntTy, - AppE "sumSTree" ["l772"] [VarE "tr773"]) $ + AppE ("sumSTree", NoTail) ["l772"] [VarE "tr773"]) $ VarE "sum774" sumSTreeProg :: Prog2 @@ -965,11 +967,11 @@ sumUpMainExp :: Exp2 sumUpMainExp = Ext $ LetRegionE (VarR "r530") Undefined Nothing $ Ext $ LetLocE "l531" (StartOfRegionLE (VarR "r530")) $ LetE ("x532",[], PackedTy "STree" "l531", - AppE "buildSTree" ["l531"] [LitE 2]) $ + AppE ("buildSTree", NoTail) ["l531"] [LitE 2]) $ Ext $ LetRegionE (VarR "r536") Undefined Nothing $ Ext $ LetLocE "l537" (StartOfRegionLE (VarR "r536")) $ LetE ("z538",[],PackedTy "STree" "l537", - AppE "sumUp" ["l531","l537"] [VarE "x532"]) $ + AppE ("sumUp", NoTail) ["l531","l537"] [VarE "x532"]) $ VarE "z538" sumUpProg :: Prog2 @@ -1042,14 +1044,14 @@ setEvenFun = FunDef "setEven" ["tr570"] setEvenFunTy setEvenFunBod (FunMeta Rec Ext $ LetLocE "l585" (AfterVariableLE "i576" "l584" True) $ Ext $ LetLocE "l586" (AfterVariableLE "b578" "l585" True) $ LetE ("x587",[],PackedTy "STree" "l586", - AppE "setEven" ["l581","l586"] [VarE "x580"]) $ + AppE ("setEven", NoTail) ["l581","l586"] [VarE "x580"]) $ Ext $ LetLocE "l588" (AfterVariableLE "x587" "l586" True) $ LetE ("y589",[],PackedTy "STree" "l588", - AppE "setEven" ["l583","l588"] [VarE "y582"]) $ - LetE ("v590",[],IntTy, AppE "valueSTree" ["l586"] [VarE "x587"]) $ - LetE ("v591",[],IntTy, AppE "valueSTree" ["l588"] [VarE "y589"]) $ + AppE ("setEven", NoTail) ["l583","l588"] [VarE "y582"]) $ + LetE ("v590",[],IntTy, AppE ("valueSTree", NoTail) ["l586"] [VarE "x587"]) $ + LetE ("v591",[],IntTy, AppE ("valueSTree", NoTail) ["l588"] [VarE "y589"]) $ LetE ("v592",[],IntTy, PrimAppE AddP [VarE "v590", VarE "v591"]) $ - LetE ("b593",[],IntTy, AppE "even" [] [VarE "v592"]) $ + LetE ("b593",[],IntTy, AppE ("even", NoTail) [] [VarE "v592"]) $ LetE ("z594",[],PackedTy "STree" "lout572", DataConE "lout572" "Inner" [VarE "i576", VarE "b593", VarE "x587", VarE "y589"]) $ @@ -1061,11 +1063,11 @@ setEvenMainExp :: Exp2 setEvenMainExp = Ext $ LetRegionE (VarR "r592") Undefined Nothing $ Ext $ LetLocE "l593" (StartOfRegionLE (VarR "r592")) $ LetE ("x594",[], PackedTy "STree" "l593", - AppE "buildSTree" ["l593"] [LitE 2]) $ + AppE ("buildSTree", NoTail) ["l593"] [LitE 2]) $ Ext $ LetRegionE (VarR "r595") Undefined Nothing $ Ext $ LetLocE "l596" (StartOfRegionLE (VarR "r595")) $ LetE ("z597",[],PackedTy "STree" "l596", - AppE "setEven" ["l593","l596"] [VarE "x594"]) $ + AppE ("setEven", NoTail) ["l593","l596"] [VarE "x594"]) $ VarE "z597" @@ -1112,7 +1114,6 @@ sumUpSetEvenFun = FunDef "sumUpSetEven" ["tr600"] sumUpSetEvenFunTy sumUpSetEven [] False - sumUpSetEvenFunBod :: Exp2 sumUpSetEvenFunBod = CaseE (VarE "tr600") [ ("Leaf", [("n603","l604")], @@ -1127,16 +1128,16 @@ sumUpSetEvenFun = FunDef "sumUpSetEven" ["tr600"] sumUpSetEvenFunTy sumUpSetEven Ext $ LetLocE "l615" (AfterVariableLE "i607" "l614" True) $ Ext $ LetLocE "l616" (AfterVariableLE "b609" "l615" True) $ LetE ("tx617",[], ProdTy [PackedTy "STree" "l616", IntTy], - AppE "sumUpSetEven" ["l612","l616"] [VarE "x611"]) $ + AppE ("sumUpSetEven", NoTail) ["l612","l616"] [VarE "x611"]) $ LetE ("x618",[],PackedTy "STree" "l616", ProjE 0 (VarE "tx617")) $ LetE ("v619",[],IntTy, ProjE 1 (VarE "tx617")) $ Ext $ LetLocE "l620" (AfterVariableLE "x618" "l616" True) $ LetE ("tx621",[],ProdTy [PackedTy "STree" "l620", IntTy], - AppE "sumUpSetEven" ["l622","l620"] [VarE "y613"]) $ + AppE ("sumUpSetEven", NoTail) ["l622","l620"] [VarE "y613"]) $ LetE ("y623",[],PackedTy "STree" "l620", ProjE 0 (VarE "tx621")) $ LetE ("v624",[],IntTy, ProjE 1 (VarE "tx621")) $ LetE ("v625",[],IntTy, PrimAppE AddP [VarE "v619", VarE "v624"]) $ - LetE ("b626",[],IntTy, AppE "even" [] [VarE "v625"]) $ + LetE ("b626",[],IntTy, AppE ("even", NoTail) [] [VarE "v625"]) $ LetE ("z627",[],PackedTy "STree" "lout602", DataConE "lout602" "Inner" [VarE "v625", VarE "b626", VarE "x618", VarE "y623"]) $ @@ -1150,11 +1151,11 @@ sumUpSetEvenExp :: Exp2 sumUpSetEvenExp = Ext $ LetRegionE (VarR "r628") Undefined Nothing $ Ext $ LetLocE "l629" (StartOfRegionLE (VarR "r628")) $ LetE ("z630",[], PackedTy "STree" "l629", - AppE "buildSTree" ["l629"] [LitE 3]) $ + AppE ("buildSTree", NoTail) ["l629"] [LitE 3]) $ Ext $ LetRegionE (VarR "r631") Undefined Nothing $ Ext $ LetLocE "l632" (StartOfRegionLE (VarR "r631")) $ LetE ("z633",[],ProdTy [PackedTy "STree" "l632", IntTy], - AppE "sumUpSetEven" ["l629","l632"] [VarE "z630"]) $ + AppE ("sumUpSetEven", NoTail) ["l629","l632"] [VarE "z630"]) $ VarE "z633" @@ -1215,10 +1216,10 @@ copyExprFun = FunDef "copyExpr" ["e700"] copyExprFunTy copyExprFunBod (FunMeta R Ext $ LetLocE "l712" (AfterConstantLE 1 "lout703") $ Ext $ LetLocE "l713" (AfterVariableLE "v706" "l712" True) $ LetE ("rhs714",[], PackedTy "Expr" "l713", - AppE "copyExpr" ["l709","l713"] [VarE "rhs708"]) $ + AppE ("copyExpr", NoTail) ["l709","l713"] [VarE "rhs708"]) $ Ext $ LetLocE "l715" (AfterVariableLE "rhs714" "l713" True) $ LetE ("bod716",[],PackedTy "Expr" "l715", - AppE "copyExpr" ["l711", "l715"] [VarE "bod710"]) $ + AppE ("copyExpr", NoTail) ["l711", "l715"] [VarE "bod710"]) $ LetE ("z717",[],PackedTy "Expr" "lout703", DataConE "lout703" "LETE" [VarE "v706", VarE "rhs714", VarE "bod716"]) $ VarE "z717") @@ -1252,7 +1253,7 @@ substFun = FunDef "subst" ["tr653"] substFunTy substFunBod (FunMeta Rec NoInline LetE ("b659",[], BoolTy, PrimAppE EqIntP [VarE "v657", VarE "old654"]) $ IfE (VarE "b659") - (AppE "copyExpr" ["lin651", "lout653"] [VarE "new655"]) + (AppE ("copyExpr", NoTail) ["lin651", "lout653"] [VarE "new655"]) (DataConE "lout653" "VARREF" [VarE "v657"])) , ("LETE", [("v656","l657"), ("rhs658","l659"), ("bod660", "l661")], LetE ("b662",[],BoolTy, @@ -1263,10 +1264,10 @@ substFun = FunDef "subst" ["tr653"] substFunTy substFunBod (FunMeta Rec NoInline LetE ("p668",[], ProdTy [IntTy, PackedTy "Expr" "lin651", PackedTy "Expr" "l659"], MkProdE [VarE "old654", VarE "new655", VarE "rhs658"]) $ LetE ("rhs665",[],PackedTy "Expr" "l664", - AppE "subst" ["lin651", "l659", "l664"] [VarE "p668"]) $ + AppE ("subst", NoTail) ["lin651", "l659", "l664"] [VarE "p668"]) $ Ext $ LetLocE "l669" (AfterVariableLE "rhs665" "l664" True) $ LetE ("bod670",[], PackedTy "Expr" "l669", - AppE "copyExpr" ["l661", "l669"] [VarE "bod660"]) $ + AppE ("copyExpr", NoTail) ["l661", "l669"] [VarE "bod660"]) $ LetE ("z671",[], PackedTy "Expr" "lout653", DataConE "lout653" "LETE" [VarE "v656", VarE "rhs665", VarE "bod670"]) $ VarE "z671") @@ -1295,7 +1296,7 @@ substMainExp = Ext $ LetRegionE (VarR "r720") Undefined Nothing $ MkProdE [VarE "old726", VarE "new730", VarE "z727"]) $ Ext $ LetLocE "l730" (AfterVariableLE "new730" "l729" True) $ LetE ("z732",[], PackedTy "Expr" "l730", - AppE "subst" ["l729", "l721", "l730"] [VarE "p731"]) $ + AppE ("subst", NoTail) ["l729", "l721", "l730"] [VarE "p731"]) $ VarE "z732" @@ -1340,10 +1341,10 @@ indrBuildTreeFun = FunDef "indrBuildTree" ["i270"] indrBuildTreeTy indrBuildTree Ext $ LetLocE "loc_indr" (AfterConstantLE 1 "lout272") $ Ext $ LetLocE "l274" (AfterConstantLE 8 "loc_indr") $ LetE ("x275",[],PackedTy "Tree" "l274", - AppE "indrBuildTree" ["l274"] [VarE "i273"]) $ + AppE ("indrBuildTree", NoTail) ["l274"] [VarE "i273"]) $ Ext $ LetLocE "l276" (AfterVariableLE "x275" "l274" True) $ LetE ("y277",[],PackedTy "Tree" "l276", - AppE "indrBuildTree" ["l276"] [VarE "i273"]) $ + AppE ("indrBuildTree", NoTail) ["l276"] [VarE "i273"]) $ LetE ("indr_cur",[],CursorTy,Ext (StartOfPkdCursor "y277")) $ -- LetE ("indr_node",[], PackedTy "Tree" "loc_indr", -- DataConE "loc_indr" (indirectionTag++"1") [VarE "indr_cur"]) $ @@ -1357,7 +1358,7 @@ indrBuildTreeMainExp :: Exp2 indrBuildTreeMainExp = Ext $ LetRegionE (VarR "r800") Undefined Nothing $ Ext $ LetLocE "l801" (StartOfRegionLE (VarR "r800")) $ LetE ("tr802", [], PackedTy "Tree" "l801", - AppE "indrBuildTree" ["l801"] [LitE 3]) $ + AppE ("indrBuildTree", NoTail) ["l801"] [LitE 3]) $ VarE "tr802" indrBuildTreeProg :: Prog2 @@ -1382,16 +1383,16 @@ indrRightmostBod = CaseE (VarE "t742") [("Leaf", [("n746","l747")], VarE "n746"), ("Node^", [("indr_y750","lindr_y750"),("x748","l749"), ("y750","l751")], - LetE ("lm752",[],IntTy, AppE "indrRightmost" ["l751"] [VarE "y750"]) $ + LetE ("lm752",[],IntTy, AppE ("indrRightmost", NoTail) ["l751"] [VarE "y750"]) $ VarE "lm752")] indrRightmostMainExp :: Exp2 indrRightmostMainExp = Ext $ LetRegionE (VarR "r753") Undefined Nothing $ Ext $ LetLocE "l754" (StartOfRegionLE (VarR "r753")) $ LetE ("tr1", [], PackedTy "Tree" "l754", - AppE "indrBuildTree" ["l754"] [LitE 3]) $ + AppE ("indrBuildTree", NoTail) ["l754"] [LitE 3]) $ LetE ("a760",[], IntTy, - AppE "indrRightmost" ["l754"] [VarE "tr1"]) $ + AppE ("indrRightmost", NoTail) ["l754"] [VarE "tr1"]) $ VarE "a760" indrRightmostProg :: Prog2 @@ -1412,7 +1413,7 @@ indrIDFun = FunDef "indrID" ["tr800"] indrIDTy indrIDBod (FunMeta NotRec NoInlin (PackedTy "Tree" "lout803") [] False - + indrIDBod :: Exp2 indrIDBod = LetE ("a804",[], PackedTy "Tree" "lout803", Ext $ IndirectionE "Tree" @@ -1429,13 +1430,13 @@ indrIDMainExp :: Exp2 indrIDMainExp = Ext $ LetRegionE (VarR "r806") Undefined Nothing $ Ext $ LetLocE "l807" (StartOfRegionLE (VarR "r806")) $ LetE ("tr1",[], PackedTy "Tree" "l807", - AppE "indrBuildTree" ["l807"] [LitE 2]) $ + AppE ("indrBuildTree", NoTail) ["l807"] [LitE 2]) $ Ext $ LetRegionE (VarR "r808") Undefined Nothing $ Ext $ LetLocE "l809" (StartOfRegionLE (VarR "r808")) $ LetE ("tr2",[], PackedTy "Tree" "l809", - AppE "indrID" ["l807", "l809"] [VarE "tr1"]) $ + AppE ("indrID", NoTail) ["l807", "l809"] [VarE "tr1"]) $ LetE ("rmost",[], IntTy, - AppE "indrRightmost" ["l809"] [VarE "tr2"]) $ + AppE ("indrRightmost", NoTail) ["l809"] [VarE "tr2"]) $ VarE "rmost" indrIDProg :: Prog2 @@ -1451,13 +1452,13 @@ indrIDSumMainExp :: Exp2 indrIDSumMainExp = Ext $ LetRegionE (VarR "r806") Undefined Nothing $ Ext $ LetLocE "l807" (StartOfRegionLE (VarR "r806")) $ LetE ("tr1",[], PackedTy "Tree" "l807", - AppE "buildTree" ["l807"] [LitE 10]) $ + AppE ("buildTree", NoTail) ["l807"] [LitE 10]) $ Ext $ LetRegionE (VarR "r808") Undefined Nothing $ Ext $ LetLocE "l809" (StartOfRegionLE (VarR "r808")) $ LetE ("tr2",[], PackedTy "Tree" "l809", - AppE "indrID" ["l807", "l809"] [VarE "tr1"]) $ + AppE ("indrID", NoTail) ["l807", "l809"] [VarE "tr1"]) $ LetE ("total",[], IntTy, - AppE "sumTree" ["l809"] [VarE "tr2"]) $ + AppE ("sumTree", NoTail) ["l809"] [VarE "tr2"]) $ VarE "total" indrIDSumProg :: Prog2 diff --git a/gibbon-compiler/src/Gibbon/L2/Interp.hs b/gibbon-compiler/src/Gibbon/L2/Interp.hs index 95a9cfcde..0a9ef93df 100644 --- a/gibbon-compiler/src/Gibbon/L2/Interp.hs +++ b/gibbon-compiler/src/Gibbon/L2/Interp.hs @@ -81,7 +81,7 @@ interp szenv rc valenv ddefs fenv e = go valenv szenv e -- value as well. Also, since we're storing regions in the value -- environment anyways, we probably don't need an additional store. -- - AppE f locs args -> + AppE (f, _) locs args -> case M.lookup f fenv of Nothing -> error $ "L2.Interp: unbound function: "++sdoc ex Just FunDef{funArgs,funBody,funTy} -> do @@ -132,7 +132,7 @@ interp szenv rc valenv ddefs fenv e = go valenv szenv e let trav_fn = mkTravFunName pkd_tycon -- Bind v to (SOne -1) in sizeEnv temporarily, just long enough -- to evaluate the call to trav_fn. - (_, sizev) <- go aenv' (M.insert v (SOne (-1)) sizeEnv) (AppE trav_fn [loc] [VarE v]) + (_, sizev) <- go aenv' (M.insert v (SOne (-1)) sizeEnv) (AppE (trav_fn, NoTail) [loc] [VarE v]) let sizeloc = fromJust $ byteSizeOfTy CursorTy asizeEnv' = M.insert v sizev $ M.insert loc (SOne sizeloc) $ @@ -260,7 +260,7 @@ interp szenv rc valenv ddefs fenv e = go valenv szenv e else tell$ string8 $ "SELFTIMED: "++show tm ++"\n" return $! (val, sz) - SpawnE f locs args -> go env sizeEnv (AppE f locs args) + SpawnE f locs args -> go env sizeEnv (AppE (f, NoTail) locs args) SyncE -> pure $ (VInt (-1), SOne 0) WithArenaE{} -> error "L2.Interp: WithArenE not handled" diff --git a/gibbon-compiler/src/Gibbon/L2/Syntax.hs b/gibbon-compiler/src/Gibbon/L2/Syntax.hs index 974a86a54..2fba077c2 100644 --- a/gibbon-compiler/src/Gibbon/L2/Syntax.hs +++ b/gibbon-compiler/src/Gibbon/L2/Syntax.hs @@ -144,7 +144,7 @@ instance Monoid RegionSize where data E2Ext loc dec = LetRegionE Region RegionSize (Maybe RegionType) (E2 loc dec) -- ^ Allocate a new region. | LetParRegionE Region RegionSize (Maybe RegionType) (E2 loc dec) -- ^ Allocate a new region for parallel allocations. - | LetLocE LocVar (PreLocExp loc) (E2 loc dec) -- ^ Bind a new location. + | LetLocE loc (PreLocExp loc) (E2 loc dec) -- ^ Bind a new location. | RetE [loc] Var -- ^ Return a value together with extra loc values. | FromEndE loc -- ^ Bind a location from an EndOf location (for RouteEnds and after). | BoundsCheck Int -- Bytes required @@ -168,8 +168,8 @@ data E2Ext loc dec | GetCilkWorkerNum -- ^ Translates to __cilkrts_get_worker_number(). | LetAvail [Var] (E2 loc dec) -- ^ These variables are available to use before the join point. - | AllocateTagHere LocVar TyCon - | AllocateScalarsHere LocVar + | AllocateTagHere loc TyCon + | AllocateScalarsHere loc -- ^ A marker which tells subsequent a compiler pass where to -- move the tag and scalar field allocations so that they happen -- before any of the subsequent packed fields. @@ -396,14 +396,14 @@ instance HasRenamable E2Ext l d => Renamable (E2Ext l d) where -- | Our type for functions grows to include effects, and explicit universal -- quantification over location/region variables. data ArrowTy2 ty2 = ArrowTy2 - { locVars :: [LRM] -- ^ Universally-quantified location params. - -- Only these should be referenced in arrIn/arrOut. - , arrIns :: [ty2] -- ^ Input type for the function. - , arrEffs :: (S.Set Effect) -- ^ These are present-but-empty initially, - -- and the populated by InferEffects. - , arrOut :: ty2 -- ^ Output type for the function. - , locRets :: [LocRet] -- ^ L2B feature: multi-valued returns. - , hasParallelism :: Bool -- ^ Does this function have parallelism + { locVars :: [LRM] -- ^ Universally-quantified location params. + -- Only these should be referenced in arrIn/arrOut. + , arrIns :: [ty2] -- ^ Input type for the function. + , arrEffs :: (S.Set Effect) -- ^ These are present-but-empty initially, + -- and the populated by InferEffects. + , arrOut :: ty2 -- ^ Output type for the function. + , locRets :: [LocRet] -- ^ L2B feature: multi-valued returns. + , hasParallelism :: Bool -- ^ Does this function have parallelism } deriving (Read, Show, Eq, Ord, Functor, Generic, NFData) @@ -465,17 +465,19 @@ instance NFData Region where -- | The modality of locations and cursors: input/output, for reading -- and writing, respectively. -data Modality = Input | Output +data Modality = Input | Output | OutputMutable deriving (Read,Show,Eq,Ord, Generic) instance Out Modality instance NFData Modality where rnf Input = () rnf Output = () + rnf OutputMutable = () -- | A location and region, together with modality. data LRM = LRM { lrmLoc :: LocVar , lrmReg :: Region - , lrmMode :: Modality } + , lrmMode :: Modality + } deriving (Read,Show,Eq,Ord, Generic) instance Out LRM @@ -516,10 +518,10 @@ instance Typeable (PreExp E2Ext LocVar (UrTy LocVar)) where CharE{} -> CharTy FloatE{} -> FloatTy LitSymE _ -> SymTy - AppE v locs _ -> let fnty = fEnv env2 # v - outty = arrOut fnty - mp = M.fromList $ zip (allLocVars fnty) locs - in substLoc mp outty + AppE (v, _) locs _ -> let fnty = fEnv env2 # v + outty = arrOut fnty + mp = M.fromList $ zip (allLocVars fnty) locs + in substLoc mp outty PrimAppE (DictInsertP ty) ((VarE v):_) -> SymDictTy (Just v) $ stripTyLocs ty PrimAppE (DictEmptyP ty) ((VarE v):_) -> SymDictTy (Just v) $ stripTyLocs ty @@ -576,11 +578,11 @@ inLocVars ty = L.map (\(LRM l _ _) -> l) $ outLocVars :: ArrowTy2 ty2 -> [LocVar] outLocVars ty = L.map (\(LRM l _ _) -> l) $ - L.filter (\(LRM _ _ m) -> m == Output) (locVars ty) + L.filter (\(LRM _ _ m) -> m == Output || m == OutputMutable) (locVars ty) outRegVars :: ArrowTy2 ty2 -> [LocVar] outRegVars ty = L.map (\(LRM _ r _) -> regionToVar r) $ - L.filter (\(LRM _ _ m) -> m == Output) (locVars ty) + L.filter (\(LRM _ _ m) -> m == Output || m == OutputMutable) (locVars ty) inRegVars :: ArrowTy2 ty2 -> [LocVar] inRegVars ty = L.nub $ L.map (\(LRM _ r _) -> regionToVar r) $ @@ -685,11 +687,11 @@ revertExp ex = CharE c -> CharE c FloatE n -> FloatE n LitSymE v -> LitSymE v - AppE v _ args -> AppE v [] (L.map revertExp args) + AppE (v, mu) _ args -> AppE (v, mu) [] (L.map revertExp args) PrimAppE p args -> PrimAppE (revertPrim p) $ L.map revertExp args LetE (v,_,ty, (Ext (IndirectionE _ _ _ _ arg))) bod -> let PackedTy tycon _ = ty in - LetE (v,[],(stripTyLocs ty), AppE (mkCopyFunName tycon) [] [revertExp arg]) (revertExp bod) + LetE (v,[],(stripTyLocs ty), AppE (mkCopyFunName tycon, NoTail) [] [revertExp arg]) (revertExp bod) LetE (v,_,ty,rhs) bod -> LetE (v,[], stripTyLocs ty, revertExp rhs) (revertExp bod) IfE a b c -> IfE (revertExp a) (revertExp b) (revertExp c) @@ -813,6 +815,7 @@ mapPacked fn t = SymSetTy -> SymSetTy SymHashTy-> SymHashTy IntHashTy-> IntHashTy + MutableCursorTy -> MutableCursorTy constPacked :: UrTy a1 -> UrTy a2 -> UrTy a1 constPacked c t = @@ -834,6 +837,7 @@ constPacked c t = SymSetTy -> SymSetTy SymHashTy-> SymHashTy IntHashTy-> IntHashTy + MutableCursorTy -> MutableCursorTy -- | Build a dependency list which can be later converted to a graph depList :: Exp2 -> [(Var, Var, [Var])] @@ -958,8 +962,8 @@ changeAppToSpawn v args2 ex1 = CharE{} -> ex1 FloatE{} -> ex1 LitSymE{} -> ex1 - AppE f locs args | v == f && args == args2 -> SpawnE f locs $ map go args - AppE f locs args -> AppE f locs $ map go args + AppE (f, _) locs args | v == f && args == args2 -> SpawnE f locs $ map go args + AppE (f, t) locs args -> AppE (f, t) locs $ map go args PrimAppE f args -> PrimAppE f $ map go args LetE (v,loc,ty,rhs) bod -> LetE (v,loc,ty, go rhs) (go bod) IfE a b c -> IfE (go a) (go b) (go c) diff --git a/gibbon-compiler/src/Gibbon/L2/Typecheck.hs b/gibbon-compiler/src/Gibbon/L2/Typecheck.hs index fcb078ddb..69344fb32 100644 --- a/gibbon-compiler/src/Gibbon/L2/Typecheck.hs +++ b/gibbon-compiler/src/Gibbon/L2/Typecheck.hs @@ -138,7 +138,7 @@ tcExp ddfs env funs constrs regs tstatein exp = LitSymE _v -> return (SymTy, tstatein) - AppE v ls args -> + AppE (v, _) ls args -> -- Checking function application involves a few steps: -- (1) We need to make sure the inputs/ouptuts line up with the expected -- types for the function. @@ -746,7 +746,7 @@ tcExp ddfs env funs constrs regs tstatein exp = return (ty1,tstate1) SpawnE f locs args -> - tcExp ddfs env funs constrs regs tstatein (AppE f locs args) + tcExp ddfs env funs constrs regs tstatein (AppE (f, NoTail) locs args) SyncE -> pure (ProdTy [], tstatein) diff --git a/gibbon-compiler/src/Gibbon/L3/Syntax.hs b/gibbon-compiler/src/Gibbon/L3/Syntax.hs index 1274c289c..be16925de 100644 --- a/gibbon-compiler/src/Gibbon/L3/Syntax.hs +++ b/gibbon-compiler/src/Gibbon/L3/Syntax.hs @@ -55,8 +55,10 @@ type Ty3 = UrTy () data E3Ext loc dec = ReadScalar Scalar Var -- ^ One cursor in, (int, cursor') out | WriteScalar Scalar Var (PreExp E3Ext loc dec) -- ^ Write int at cursor, and return a cursor + | WriteScalarMutable Scalar Var (PreExp E3Ext loc dec) -- ^ Write int at cursor, and return void | ReadTag Var -- ^ One cursor in, (tag,cursor) out | WriteTag DataCon Var -- ^ Write Tag at Cursor, and return a cursor + | WriteTagMutable DataCon Var -- ^ Write Tag at Mutable Cursor and return void | TagCursor Var Var -- ^ Create a tagged cursor | WriteTaggedCursor Var (PreExp E3Ext loc dec) -- ^ Write a tagged cursor | ReadTaggedCursor Var -- ^ Reads and returns a tagged cursor at Var @@ -67,6 +69,7 @@ data E3Ext loc dec = | ReadVector Var dec -- ^ Read a pointer to a vector | WriteVector Var (PreExp E3Ext loc dec) dec -- ^ Write a pointer to a vector | AddCursor Var (PreExp E3Ext loc dec) -- ^ Add a constant offset to a cursor variable + | BumpMutableCursor Var (PreExp E3Ext loc dec) -- ^ Add a constant offset to a mutable cursor and return an updated mutable cursor | SubPtr Var Var -- ^ Pointer subtraction | NewBuffer L2.Multiplicity -- ^ Create a new buffer, and return a cursor | ScopedBuffer L2.Multiplicity -- ^ Create a temporary scoped buffer, and return a cursor @@ -100,6 +103,10 @@ data E3Ext loc dec = | SSPop SSModality Var Var | Assert (PreExp E3Ext loc dec) -- ^ Translates to assert statements in C. -- ^ Analogous to L2's extensions. + -- Instroduce some new IR for mutable cursors + | DerefMutableCursor Var -- ^ Deref a mutable cursor to get back a non mutable cursorTy + + deriving (Show, Ord, Eq, Read, Generic, NFData) instance FreeVars (E3Ext l d) where @@ -277,11 +284,36 @@ cursorizeTy ty = ProdTy ls -> ProdTy $ L.map cursorizeTy ls SymDictTy v _ -> SymDictTy v CursorTy PDictTy k v -> PDictTy (cursorizeTy k) (cursorizeTy v) + -- TODO: This needs to change such that we don't always blindly return a CursorTy. PackedTy{} -> ProdTy [CursorTy, CursorTy] VectorTy el_ty' -> VectorTy $ cursorizeTy el_ty' ListTy el_ty' -> ListTy $ cursorizeTy el_ty' PtrTy -> PtrTy CursorTy -> CursorTy + MutableCursorTy -> MutableCursorTy + ArenaTy -> ArenaTy + SymSetTy -> SymSetTy + SymHashTy-> SymHashTy + IntHashTy-> IntHashTy + +cursorizeTy2 :: (Var -> l -> UrTy l) -> UrTy l -> UrTy l +cursorizeTy2 fn ty = + case ty of + IntTy -> IntTy + CharTy -> CharTy + FloatTy -> FloatTy + SymTy -> SymTy + BoolTy -> BoolTy + ProdTy ls -> ProdTy $ L.map (cursorizeTy2 fn) ls + SymDictTy v _ -> SymDictTy v CursorTy + PDictTy k v -> PDictTy (cursorizeTy2 fn k) (cursorizeTy2 fn v) + -- TODO: This needs to change such that we don't always blindly return a CursorTy. + PackedTy k l -> fn (toVar k) l + VectorTy el_ty' -> VectorTy $ cursorizeTy2 fn el_ty' + ListTy el_ty' -> ListTy $ cursorizeTy2 fn el_ty' + PtrTy -> PtrTy + CursorTy -> CursorTy + MutableCursorTy -> MutableCursorTy ArenaTy -> ArenaTy SymSetTy -> SymSetTy SymHashTy-> SymHashTy diff --git a/gibbon-compiler/src/Gibbon/L3/Typecheck.hs b/gibbon-compiler/src/Gibbon/L3/Typecheck.hs index 8c2372b8d..773c45157 100644 --- a/gibbon-compiler/src/Gibbon/L3/Typecheck.hs +++ b/gibbon-compiler/src/Gibbon/L3/Typecheck.hs @@ -239,7 +239,7 @@ tcExp isPacked ddfs env exp = FloatE{} -> return FloatTy LitSymE _ -> return SymTy - AppE v locs ls -> do + AppE (v, _) locs ls -> do let funty = case (M.lookup v (fEnv env)) of Just ty -> ty @@ -831,7 +831,7 @@ tcExp isPacked ddfs env exp = ty <- go e return ty - SpawnE fn locs args -> go (AppE fn locs args) + SpawnE fn locs args -> go (AppE (fn, NoTail) locs args) SyncE -> pure voidTy WithArenaE v e -> do diff --git a/gibbon-compiler/src/Gibbon/Language.hs b/gibbon-compiler/src/Gibbon/Language.hs index b6757df1c..87036c8f7 100644 --- a/gibbon-compiler/src/Gibbon/Language.hs +++ b/gibbon-compiler/src/Gibbon/Language.hs @@ -83,7 +83,7 @@ instance FreeVars (e l d) => FreeVars (PreExp e l d) where LitSymE _ -> S.empty ProjE _ e -> gFreeVars e IfE a b c -> gFreeVars a `S.union` gFreeVars b `S.union` gFreeVars c - AppE v _ ls -> S.unions $ (S.singleton v) : (L.map gFreeVars ls) + AppE (v,_) _ ls -> S.unions $ (S.singleton v) : (L.map gFreeVars ls) PrimAppE _ ls -> S.unions (L.map gFreeVars ls) LetE (v,_,_,rhs) bod -> gFreeVars rhs `S.union` S.delete v (gFreeVars bod) @@ -121,7 +121,7 @@ instance (Show (), Out (), CharE _ -> CharTy FloatE{} -> FloatTy LitSymE _ -> SymTy - AppE v _ _ -> outTy $ fEnv env2 # v + AppE (v, _) _ _ -> outTy $ fEnv env2 # v PrimAppE (DictInsertP ty) ((VarE v):_) -> SymDictTy (Just v) $ stripTyLocs ty PrimAppE (DictEmptyP ty) ((VarE v):_) -> SymDictTy (Just v) $ stripTyLocs ty PrimAppE p _ -> primRetTy p @@ -164,7 +164,7 @@ instance HasRenamable e l d => Renamable (PreExp e l d) where CharE{} -> ex FloatE{} -> ex LitSymE{} -> ex - AppE f locs args -> AppE (go f) (gol locs) (gol args) + AppE (f, isTail) locs args -> AppE (go f, isTail) (gol locs) (gol args) PrimAppE pr args -> PrimAppE pr (gol args) LetE (v,locs,ty,rhs) bod -> LetE (go v, gol locs, go ty, go rhs) (go bod) IfE a b c -> IfE (go a) (go b) (go c) @@ -752,6 +752,7 @@ stripTyLocs ty = SymHashTy -> SymHashTy IntHashTy -> IntHashTy ArenaTy -> ArenaTy + MutableCursorTy -> MutableCursorTy -- | Get the data constructor type from a type, failing if it's not packed tyToDataCon :: Show a => UrTy a -> DataCon diff --git a/gibbon-compiler/src/Gibbon/Language/Syntax.hs b/gibbon-compiler/src/Gibbon/Language/Syntax.hs index 2d0b0b6cb..19ef3e363 100644 --- a/gibbon-compiler/src/Gibbon/Language/Syntax.hs +++ b/gibbon-compiler/src/Gibbon/Language/Syntax.hs @@ -19,7 +19,7 @@ module Gibbon.Language.Syntax , lookupDataCon', insertDD, emptyDD, fromListDD, isVoidDDef -- * Function definitions - , FunctionTy(..), FunDefs, FunDef(..), FunMeta(..), FunRec(..), FunInline(..) + , FunctionTy(..), FunDefs, FunDef(..), FunMeta(..), FunRec(..), FunInline(..), TailRecType(..) , insertFD, fromListFD, initFunEnv -- * Programs @@ -187,6 +187,12 @@ data FunRec = Rec | NotRec | TailRec data FunInline = Inline | NoInline | Inlineable deriving (Read, Show, Eq, Ord, Generic, NFData, Out) + -- ^ Type of tail recursive calls: NOTail | TC | TMC +data TailRecType = NoTail + | TC + | TMC + deriving (Read, Show, Eq, Ord, Generic, NFData, Out) + data FunMeta = FunMeta { funRec :: FunRec , funInline :: FunInline @@ -343,7 +349,7 @@ data PreExp (ext :: Type -> Type -> Type) loc dec = | CharE Char -- ^ A character literal | FloatE Double -- ^ Floating point literal | LitSymE Var -- ^ A quoted symbol literal - | AppE Var [loc] [EXP] + | AppE (Var, TailRecType) [loc] [EXP] -- ^ Apply a top-level / first-order function. Instantiate -- its type schema by providing location-variable arguments, -- if applicable. @@ -567,6 +573,10 @@ data UrTy loc -- to an unkwown type or to a fraction of a complete value. -- It is a machine pointer that can point to any byte. + | MutableCursorTy -- ^ A cursor for writing to an output location. + -- It is a mutable cursor, the address that the + -- cursor points to changes. + deriving (Show, Read, Ord, Eq, Generic, NFData, Functor, Foldable, Traversable, Out) diff --git a/gibbon-compiler/src/Gibbon/NewL2/FromOldL2.hs b/gibbon-compiler/src/Gibbon/NewL2/FromOldL2.hs index 6d0730211..dc35613c6 100644 --- a/gibbon-compiler/src/Gibbon/NewL2/FromOldL2.hs +++ b/gibbon-compiler/src/Gibbon/NewL2/FromOldL2.hs @@ -58,12 +58,12 @@ fromOldL2Exp ddefs fundefs locenv env2 ex = | SpawnE f applocs args <- rhs , not (null ewitnesses) -> - do let e = LetE (v, ewitnesses, ty, AppE f applocs args) bod - (LetE (v', ewitnesses', ty', AppE f' applocs' args') bod') <- + do let e = LetE (v, ewitnesses, ty, AppE (f, NoTail) applocs args) bod + (LetE (v', ewitnesses', ty', AppE (f', NoTail) applocs' args') bod') <- go locenv env2 e pure $ LetE (v', ewitnesses', ty', SpawnE f' applocs' args') bod' - | AppE f _applocs args <- rhs + | AppE (f, _) _applocs args <- rhs , not (null ewitnesses) -> do let fty = lookupFEnv f env2 effs = arrEffs fty @@ -164,7 +164,7 @@ fromOldL2Exp ddefs fundefs locenv env2 ex = let rhs' = fmap (locenv #) rhs locarg = toLocArg loc rhs locenv bod' <- go (M.insert loc locarg locenv) env2 bod - pure $ Ext $ LetLocE loc rhs' bod' + pure $ Ext $ LetLocE locarg rhs' bod' RetE locs v -> do let locargs = map (locenv #) locs @@ -202,10 +202,14 @@ fromOldL2Exp ddefs fundefs locenv env2 ex = pure $ Ext $ LetAvail avail rhs' AllocateTagHere loc tycon -> do - -- let locarg = locenv # loc - pure $ Ext $ AllocateTagHere loc tycon + case (M.lookup loc locenv) of + Nothing -> error $ "Could not find a locarg for location variable: " ++ sdoc loc + Just locarg -> pure $ Ext $ AllocateTagHere locarg tycon - AllocateScalarsHere loc -> pure $ Ext $ AllocateScalarsHere loc + AllocateScalarsHere loc -> do + case (M.lookup loc locenv) of + Nothing -> error $ "Could not find a locarg for location variable: " ++ sdoc loc + Just locarg -> pure $ Ext $ AllocateScalarsHere locarg SSPush mode loc end_loc tycon -> do pure $ Ext $ SSPush mode loc end_loc tycon @@ -341,7 +345,7 @@ toOldL2Exp ex = LetLocE loc rhs bod -> do let rhs' = fmap New.toLocVar rhs bod' <- go bod - pure $ Ext $ LetLocE loc rhs' bod' + pure $ Ext $ LetLocE (New.toLocVar loc) rhs' bod' StartOfPkdCursor cur -> do pure $ Ext $ StartOfPkdCursor cur @@ -377,9 +381,9 @@ toOldL2Exp ex = pure $ Ext $ LetAvail avail rhs' AllocateTagHere loc tycon -> do - pure $ Ext $ AllocateTagHere loc tycon + pure $ Ext $ AllocateTagHere (New.toLocVar loc) tycon - AllocateScalarsHere loc -> pure $ Ext $ AllocateScalarsHere loc + AllocateScalarsHere loc -> pure $ Ext $ AllocateScalarsHere (New.toLocVar loc) SSPush mode loc end_loc tycon -> do pure $ Ext $ SSPush mode loc end_loc tycon diff --git a/gibbon-compiler/src/Gibbon/NewL2/Syntax.hs b/gibbon-compiler/src/Gibbon/NewL2/Syntax.hs index 630dcd802..f812c4bfd 100644 --- a/gibbon-compiler/src/Gibbon/NewL2/Syntax.hs +++ b/gibbon-compiler/src/Gibbon/NewL2/Syntax.hs @@ -89,7 +89,6 @@ instance Out LREM instance NFData LREM where rnf (LREM a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d - fromLRM :: Old.LRM -> LREM fromLRM (Old.LRM loc reg mode) = LREM loc (Old.regionToVar reg) (toEndV (Old.regionToVar reg)) mode @@ -174,7 +173,7 @@ instance Out (Old.E2Ext LocArg Ty2) => Typeable (PreExp Old.E2Ext LocArg Ty2) wh CharE _ -> MkTy2 $ CharTy FloatE{} -> MkTy2 $ FloatTy LitSymE _ -> MkTy2 $ SymTy - AppE v locargs _ -> + AppE (v, _) locargs _ -> let fnty = fEnv env2 # v outty = Old.arrOut fnty mp = M.fromList $ zip (Old.allLocVars fnty) (map toLocVar locargs) @@ -301,7 +300,7 @@ revertExp ex = PrimAppE p args -> PrimAppE (revertPrim p) $ L.map revertExp args LetE (v,_, ty, (Ext (Old.IndirectionE _ _ _ _ arg))) bod -> let PackedTy tycon _ = unTy2 ty in - LetE (v,[],(stripTyLocs (unTy2 ty)), AppE (mkCopyFunName tycon) [] [revertExp arg]) (revertExp bod) + LetE (v,[],(stripTyLocs (unTy2 ty)), AppE (mkCopyFunName tycon, NoTail) [] [revertExp arg]) (revertExp bod) LetE (v,_,ty,rhs) bod -> LetE (v,[], stripTyLocs (unTy2 ty), revertExp rhs) (revertExp bod) IfE a b c -> IfE (revertExp a) (revertExp b) (revertExp c) @@ -393,7 +392,7 @@ depList = L.map (\(a,b) -> (a,a,b)) . M.toList . go M.empty Old.LetParRegionE r _ _ rhs -> go (M.insertWith (++) (Old.regionToVar r) (S.toList $ allFreeVars rhs) acc) rhs Old.LetLocE loc phs rhs -> - go (M.insertWith (++) loc (dep phs ++ (S.toList $ allFreeVars rhs)) acc) rhs + go (M.insertWith (++) (toLocVar loc) (dep phs ++ (S.toList $ allFreeVars rhs)) acc) rhs Old.RetE{} -> acc Old.FromEndE{} -> acc Old.BoundsCheck{} -> acc @@ -441,7 +440,7 @@ allFreeVars ex = case ext of Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) Old.LetParRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) - Old.LetLocE loc locexp bod -> S.delete loc (allFreeVars bod `S.union` gFreeVars locexp) + Old.LetLocE loc locexp bod -> S.delete (toLocVar loc) (allFreeVars bod `S.union` gFreeVars locexp) Old.StartOfPkdCursor v -> S.singleton v Old.TagCursor a b-> S.fromList [a,b] Old.RetE locs v -> S.insert v (S.fromList (map toLocVar locs)) @@ -451,8 +450,8 @@ allFreeVars ex = Old.AddFixed v _ -> S.singleton v Old.GetCilkWorkerNum-> S.empty Old.LetAvail vs bod -> S.fromList vs `S.union` gFreeVars bod - Old.AllocateTagHere loc _ -> S.singleton loc - Old.AllocateScalarsHere loc -> S.singleton loc + Old.AllocateTagHere loc _ -> S.singleton (toLocVar loc) + Old.AllocateScalarsHere loc -> S.singleton (toLocVar loc) Old.SSPush _ a b _ -> S.fromList [a,b] Old.SSPop _ a b -> S.fromList [a,b] _ -> gFreeVars ex diff --git a/gibbon-compiler/src/Gibbon/Passes/AddRAN.hs b/gibbon-compiler/src/Gibbon/Passes/AddRAN.hs index 32aa6693b..1dc70b9ee 100644 --- a/gibbon-compiler/src/Gibbon/Passes/AddRAN.hs +++ b/gibbon-compiler/src/Gibbon/Passes/AddRAN.hs @@ -205,7 +205,7 @@ addRANExp dont_change_datacons needRANsTyCons ddfs ex = CaseE (changeSpawnToApp scrt) $ map (\(a,b,c) -> (a,b, changeSpawnToApp c)) mp TimeIt e ty b -> TimeIt (changeSpawnToApp e) ty b WithArenaE v e -> WithArenaE v (changeSpawnToApp e) - SpawnE f locs args -> AppE f locs $ map changeSpawnToApp args + SpawnE f locs args -> AppE (f, NoTail) locs $ map changeSpawnToApp args SyncE -> SyncE Ext{} -> ex1 MapE{} -> error "addRANExp: TODO MapE" @@ -505,7 +505,7 @@ genRelOffsetsFunNameFn needRANsTyCons ddfs DDef{tyName, dataCons} = do bod <- do let bod0 acc = foldr (\(ty,x,y) acc -> if isPackedTy ty - then LetE (y, [], ty, AppE (mkRelOffsetsFunName (tyToDataCon ty)) [] [VarE x]) acc + then LetE (y, [], ty, AppE (mkRelOffsetsFunName (tyToDataCon ty), NoTail) [] [VarE x]) acc else LetE (y, [], ty, VarE x) acc) acc (L.zip3 tys xs ys) diff --git a/gibbon-compiler/src/Gibbon/Passes/AddTraversals.hs b/gibbon-compiler/src/Gibbon/Passes/AddTraversals.hs index 87ce4f090..c0bbb7560 100644 --- a/gibbon-compiler/src/Gibbon/Passes/AddTraversals.hs +++ b/gibbon-compiler/src/Gibbon/Passes/AddTraversals.hs @@ -191,7 +191,7 @@ genTravBinds ls = concat <$> PackedTy tycon loc1 -> do w <- gensym "trav" let fn_name = mkTravFunName tycon - return [(w,[],ProdTy [], AppE fn_name [loc1] [e])] + return [(w,[],ProdTy [], AppE (fn_name, NoTail) [loc1] [e])] -- TODO: Write a testcase for this path. ProdTy tys -> do -- So that we don't have to make assumptions about the 'e' being a VarE diff --git a/gibbon-compiler/src/Gibbon/Passes/Cursorize.hs b/gibbon-compiler/src/Gibbon/Passes/Cursorize.hs index 32483f4ab..190c15374 100644 --- a/gibbon-compiler/src/Gibbon/Passes/Cursorize.hs +++ b/gibbon-compiler/src/Gibbon/Passes/Cursorize.hs @@ -7,6 +7,8 @@ import qualified Data.Map as M import Data.Maybe (fromJust) import Text.PrettyPrint.GenericPretty import Data.Foldable ( foldrM ) +import Prelude as P +import qualified Data.Set as S import Gibbon.DynFlags import Gibbon.Common @@ -16,6 +18,7 @@ import Gibbon.L3.Syntax hiding ( BoundsCheck, RetE, GetCilkWorkerNum, TagCursor ) import qualified Gibbon.L3.Syntax as L3 import Gibbon.Passes.AddRAN ( numRANsDataCon ) +import Gibbon.Passes.Flatten (flattenL3) {- @@ -57,10 +60,10 @@ becomes add1 lout lin = let tag = readTag lin in case tag of - Leaf -> let n = readInt tag + Leaf -> let n = readInt (tag + 1) wt = writeTag lout Leaf wi = writeInt wt (n+1) - in (lin + 8, (lout, wi)) + in (lin + 9, (lout, wi)) Node -> ... Every packed input becomes a read cursor. And it takes additional output cursors @@ -70,6 +73,40 @@ if the functions "traverses" it's input (more details in the paer). -} +{- + +Mutable Cursor strategy: +~~~~~~~~~~~~~~~~~~~~~~~~~ + +In case of a mutable cursor, we do not need to store a (Cursor, Cursor) for the start +and the end of a packed value. +In case a location referes to a mutable cursor, we can just keep a Mutable Cursor for +that location. + +Mutable Cursor version for add1Tree + +-- char* +type Cursor = Ptr Char + +-- char** +type MutableCursor = Ptr Ptr Char + +add1 :: Cursor -> Cursor -> (Cursor, MutableCursor) +add1 lout lin = + let tag = readTag lin + in case tag of + Leaf -> let n = readInt (tag + 1) + () = writeTagMutable lout Leaf + () = BumpMutableCursor lout 1 + () = writeIntMutable lout (n+1) + () = BumpMutableCursor lout 8 + in (lin + 9, lout) + Node -> ... + +Packed input still becomes a read cursor. +Packed output values becomes a mutable cursor. +-} + -- | Track variables depending on location variables. -- @@ -83,6 +120,9 @@ type DepEnv = M.Map LocVar [(Var,[()],Ty3,Exp3)] -- we can extend the environment. type SyncEnv = M.Map Var [(Var,[()],Ty3,Ty2,Exp3)] +-- | Env to store the projections, we want to release them immediately at the use site. +type LazyProjectionEnv = M.Map Var ([()], Ty3, Exp3) + type OldTy2 = UrTy LocVar -- | @@ -116,7 +156,7 @@ cursorizeFunDef ddefs fundefs FunDef{funName,funTy,funArgs,funBody,funMeta} = do -- intuitive and can be improved. -- Input & output regions are always inserted before all other arguments. - regBinds = map toEndV (inRegs ++ outRegs) + regBinds = map toEndV (inRegs ++ outRegs) --dbgTraceIt (sdoc funName) dbgTraceIt (sdoc funTy') dbgTraceIt ("\n") -- Output cursors after that. outCurBinds = outLocs @@ -138,6 +178,7 @@ cursorizeFunDef ddefs fundefs FunDef{funName,funTy,funArgs,funBody,funMeta} = do then fromDi <$> cursorizePackedExp ddefs fundefs M.empty initTyEnv M.empty funBody else cursorizeExp ddefs fundefs M.empty initTyEnv M.empty funBody let bod' = inCurBinds bod + --bod'' = dbgTraceIt ("Lazy proj") dbgTraceIt (sdoc (funName, funName)) dbgTraceIt ("End\n") evaluateProjectionsLazily M.empty bod' fn = FunDef funName funargs funTy' bod' funMeta return fn @@ -215,7 +256,23 @@ This is used to create bindings for input location variables. _ -> ProdTy $ out_curs ++ [unTy2 arrOut] -- Packed types in the output then become end-cursors for those same destinations. - newOut = mapPacked (\_ _ -> ProdTy [CursorTy, CursorTy]) out_ty + newOut = mapPacked (\_ l -> let locArg = filter (\(LRM l' _ m) -> l' == l) locVars + in case locArg of + [LRM _ _ OutputMutable] -> ProdTy [MutableCursorTy, CursorTy] + _ -> ProdTy [CursorTy, CursorTy] + ) out_ty + + + + + -- P.concatMap (\LRM{lrmLoc, lrmMode} -> if l == lrmLoc + -- then + -- case lrmMode of + -- OutputMutable -> ProdTy [MutableCursorTy, CursorTy] + -- Output -> ProdTy [CursorTy, CursorTy] + -- else ProdTy [CursorTy, CursorTy] + -- ) locVars + -- ) out_ty newOut' = case newOut of SymDictTy a _ -> SymDictTy a CursorTy @@ -223,15 +280,21 @@ This is used to create bindings for input location variables. -- Adding additional input arguments for the destination cursors to which outputs -- are written. - outCurs = filter (\(LRM _ _ m) -> m == Output) locVars - outCurTys = map (\_ -> CursorTy) outCurs + outCursNonMutable = filter (\(LRM _ _ m) -> m == Output) locVars + outCurTysNonMutable = map (\_ -> CursorTy) outCursNonMutable + + outCursMutable = filter (\(LRM _ _ m) -> m == OutputMutable) locVars + outCursTysMutable = map (\_ -> MutableCursorTy) outCursMutable --MutableCursorTy + inRegs = map (\_ -> CursorTy) (inRegVars ty) - in_tys = inRegs ++ outRegs ++ outCurTys ++ (map unTy2 arrIns) + in_tys = inRegs ++ outRegs ++ outCurTysNonMutable ++ outCursTysMutable ++ (map unTy2 arrIns) -- Packed types in the input now become (read-only) cursors. newIns = map (constPacked CursorTy) in_tys - in (map stripTyLocs newIns, stripTyLocs newOut') + ty' = (map stripTyLocs newIns, stripTyLocs newOut') + --dbgTraceIt (sdoc (in_tys, outRegs, outCurTysNonMutable, outCursTysMutable, arrIns, ty, outLocVars ty)) + in ty' -- | Cursorize expressions NOT producing `Packed` values @@ -333,8 +396,12 @@ cursorizeExp ddfs fundefs denv tenv senv ex = -- is expressed in terms of corresponding cursor operations. -- See `cursorizeLocExp` LetLocE loc rhs bod -> do - let rhs_either = cursorizeLocExp denv tenv senv loc rhs - (bnds,tenv') = case M.lookup loc denv of + let (rhs_either, lTy) = cursorizeLocExp denv tenv senv (toLocVar loc) rhs + lTy' = case lTy of + MkTy2{unTy2} -> case unTy2 of + CursorTy -> CursorTy + MutableCursorTy -> MutableCursorTy + (bnds,tenv') = case M.lookup (toLocVar loc) denv of Nothing -> ([],tenv) Just vs -> let extended = M.fromList [ (v,MkTy2 CursorTy) | (v,_,CursorTy,_) <- vs] in (vs, M.union extended tenv) @@ -356,14 +423,14 @@ cursorizeExp ddfs fundefs denv tenv senv ex = let tenv''' = M.union tenv' tenv'' case rhs of FromEndLE{} -> - if isBound loc tenv - then cursorizeExp ddfs fundefs denv (M.insert loc (MkTy2 CursorTy) tenv''') senv' bod + if isBound (toLocVar loc) tenv + then cursorizeExp ddfs fundefs denv (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv''') senv' bod -- Discharge bindings that were waiting on 'loc'. - else mkLets (bnds' ++ [(loc,[],CursorTy,rhs')] ++ bnds) <$> - cursorizeExp ddfs fundefs denv (M.insert loc (MkTy2 CursorTy) tenv''') senv' bod + else mkLets (bnds' ++ [((toLocVar loc),[],lTy',rhs')] ++ bnds) <$> + cursorizeExp ddfs fundefs denv (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv''') senv' bod -- Discharge bindings that were waiting on 'loc'. - _ -> mkLets (bnds' ++ [(loc,[],CursorTy,rhs')] ++ bnds) <$> - cursorizeExp ddfs fundefs denv (M.insert loc (MkTy2 CursorTy) tenv''') senv bod + _ -> mkLets (bnds' ++ [((toLocVar loc),[],lTy',rhs')] ++ bnds) <$> + cursorizeExp ddfs fundefs denv (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv''') senv bod Left denv' -> cursorizeExp ddfs fundefs denv' tenv' senv bod -- Exactly same as cursorizePackedExp @@ -373,7 +440,26 @@ cursorizeExp ddfs fundefs denv tenv senv ex = LetParRegionE reg sz _ bod -> do mkLets (regionToBinds True reg sz) <$> go bod - BoundsCheck i bound cur -> return $ Ext $ L3.BoundsCheck i (toLocVar bound) (toLocVar cur) + BoundsCheck i bound cur -> do + case (isMutableCursorTy bound, isMutableCursorTy cur) of + (True, True) -> do + bound' <- gensym "newDerefBound" + cur' <- gensym "newDerefCur" + let newBoundCheckExpr = Ext $ L3.BoundsCheck i bound' cur' + exp' <- genReadMutableCursor bound newBoundCheckExpr bound' + exp'' <- genReadMutableCursor cur exp' cur' + return $ exp'' + (False, True) -> do + cur' <- gensym "newDerefCur" + let newBoundCheckExpr = Ext $ L3.BoundsCheck i (toLocVar bound) cur' + exp' <- genReadMutableCursor cur newBoundCheckExpr cur' + return $ exp' + (True, False) -> do + bound' <- gensym "newDerefBound" + let newBoundCheckExpr = Ext $ L3.BoundsCheck i bound' (toLocVar cur) + exp' <- genReadMutableCursor bound newBoundCheckExpr bound' + return $ exp' + (False, False) -> return $ Ext $ L3.BoundsCheck i (toLocVar bound) (toLocVar cur) FromEndE{} -> error $ "cursorizeExp: TODO FromEndE" ++ sdoc ext @@ -383,9 +469,9 @@ cursorizeExp ddfs fundefs denv tenv senv ex = LetAvail vs bod -> Ext <$> L3.LetAvail vs <$> go bod - AllocateTagHere v tycon -> pure $ Ext $ L3.AllocateTagHere v tycon + AllocateTagHere v tycon -> pure $ Ext $ L3.AllocateTagHere (toLocVar v) tycon - AllocateScalarsHere v -> pure $ Ext $ L3.AllocateScalarsHere v + AllocateScalarsHere v -> pure $ Ext $ L3.AllocateScalarsHere (toLocVar v) SSPush a b c d -> pure $ Ext $ L3.SSPush a b c d SSPop a b c -> pure $ Ext $ L3.SSPop a b c @@ -397,6 +483,24 @@ cursorizeExp ddfs fundefs denv tenv senv ex = go = cursorizeExp ddfs fundefs denv tenv senv +-- genDerefOrVar :: LocArg -> Exp3 -> Var -> PassM (Either Var Exp3) +-- genDerefOrVar locArg bod var = case isMutableCursorTy locArg of +-- True -> genReadMutableCursor locArg bod +-- False -> + +isMutableCursorTy :: LocArg -> Bool +isMutableCursorTy locArg = case locArg of + Loc LREM{lremLoc, lremReg, lremEndReg, lremMode} -> case lremMode of + OutputMutable -> True + _ -> False + _ -> False + +genReadMutableCursor :: LocArg -> Exp3 -> Var -> PassM Exp3 +genReadMutableCursor locArg bod newCursor = do + let derefCursorExp = Ext $ L3.DerefMutableCursor (toLocVar locArg) + return $ LetE (newCursor, [], CursorTy, derefCursorExp) bod + + -- Cursorize expressions producing `Packed` values cursorizePackedExp :: DDefs Ty2 -> FunDefs2 -> DepEnv -> TyEnv Ty2 -> SyncEnv -> Exp2 -> PassM (DiExp Exp3) @@ -507,17 +611,20 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = mapM (unpackDataCon ddfs fundefs denv tenv senv True v) brs DataConE slocarg dcon args -> do - let sloc = toLocVar slocarg + let sloc = dbgTraceIt ("sloc arg: ") dbgTraceIt (sdoc slocarg) dbgTraceIt ("\n") toLocVar slocarg + let isMutableCur = isMutableCursorTy slocarg + let slocTy = if isMutableCur then MutableCursorTy else CursorTy -- Return (start,end) cursors -- The final return value lives at the position of the out cursors: go2 :: Bool -> Var -> [(Exp2, Ty2)] -> PassM Exp3 - go2 marker_added d [] = + go2 marker_added d [] = do + let ret_prod = if isMutableCur then VarE sloc else MkProdE [VarE sloc, VarE d] if not (marker_added) then do end_scalars_alloc <- gensym "end_scalars_alloc" return (LetE (end_scalars_alloc,[],ProdTy [],Ext $ EndScalarsAllocation sloc) - (MkProdE [VarE sloc, VarE d])) - else return (MkProdE [VarE sloc, VarE d]) + (ret_prod)) + else return ret_prod go2 marker_added d ((rnd, (MkTy2 ty)):rst) = do d' <- gensym "writecur" @@ -529,25 +636,33 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = (if not marker_added then LetE (end_scalars_alloc,[],ProdTy [],Ext $ EndScalarsAllocation sloc) else id) <$> - LetE (d',[], CursorTy, projEnds rnd') <$> + LetE (d',[], slocTy, projEnds rnd') <$> go2 True d' rst -- Int, Float, Sym, or Bool _ | isScalarTy ty -> do rnd' <- cursorizeExp ddfs fundefs denv tenv senv rnd - LetE (d',[], CursorTy, Ext $ WriteScalar (mkScalar ty) d rnd') <$> - go2 marker_added d' rst + case isMutableCur of + True -> do + deref_scalar_write <- gensym "deref_scalar_write" + LetE (deref_scalar_write, [], CursorTy, Ext $ DerefMutableCursor d) <$> + LetE (d', [], ProdTy [], Ext $ WriteScalarMutable (mkScalar ty) deref_scalar_write rnd') <$> + LetE (d, [], slocTy, Ext $ BumpMutableCursor d (LitE $ fromJust $ sizeOfTy ty)) <$> + go2 marker_added d rst + False -> do + LetE (d',[], slocTy, Ext $ WriteScalar (mkScalar ty) d rnd') <$> + go2 marker_added d' rst -- Write a pointer to a vector VectorTy el_ty -> do rnd' <- cursorizeExp ddfs fundefs denv tenv senv rnd - LetE (d',[], CursorTy, Ext $ WriteVector d rnd' (stripTyLocs el_ty)) <$> + LetE (d',[], slocTy, Ext $ WriteVector d rnd' (stripTyLocs el_ty)) <$> go2 marker_added d' rst -- Write a pointer to a vector ListTy el_ty -> do rnd' <- cursorizeExp ddfs fundefs denv tenv senv rnd - LetE (d',[], CursorTy, Ext $ WriteList d rnd' (stripTyLocs el_ty)) <$> + LetE (d',[], slocTy, Ext $ WriteList d rnd' (stripTyLocs el_ty)) <$> go2 marker_added d' rst -- shortcut pointer @@ -556,19 +671,34 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = LetE (d',[], CursorTy, Ext $ WriteTaggedCursor d rnd') <$> go2 marker_added d' rst _ -> error $ "Unknown type encounterred while cursorizing DataConE. Type was " ++ show ty - - writetag <- gensym "writetag" - after_tag <- gensym "after_tag" - start_tag_alloc <- gensym "start_tag_alloc" - end_tag_alloc <- gensym "end_tag_alloc" - start_scalars_alloc <- gensym "start_scalars_alloc" - dl <$> - LetE (start_tag_alloc,[],ProdTy [], Ext $ StartTagAllocation sloc) <$> - LetE (writetag,[], CursorTy, Ext $ WriteTag dcon sloc) <$> - LetE (end_tag_alloc,[],ProdTy [], Ext $ EndTagAllocation sloc) <$> - LetE (start_scalars_alloc,[],ProdTy [], Ext $ StartScalarsAllocation sloc) <$> - LetE (after_tag,[], CursorTy, Ext $ AddCursor sloc (L3.LitE 1)) <$> - go2 False after_tag (zip args (lookupDataCon ddfs dcon)) + case isMutableCur of + True -> do + writetag <- gensym "write_tag_mutable" + deref_for_write <- gensym "deref_for_write" + start_tag_alloc <- gensym "start_tag_alloc" + end_tag_alloc <- gensym "end_tag_alloc" + start_scalars_alloc <- gensym "start_scalars_alloc" + dl <$> + LetE (start_tag_alloc,[],ProdTy [], Ext $ StartTagAllocation sloc) <$> + LetE (deref_for_write,[], CursorTy, Ext $ DerefMutableCursor sloc) <$> + LetE (writetag,[], ProdTy [], Ext $ WriteTagMutable dcon deref_for_write) <$> + LetE (end_tag_alloc,[],ProdTy [], Ext $ EndTagAllocation sloc) <$> + LetE (start_scalars_alloc,[],ProdTy [], Ext $ StartScalarsAllocation sloc) <$> + LetE (sloc,[], slocTy, Ext $ BumpMutableCursor sloc (L3.LitE 1)) <$> + go2 False sloc (zip args (lookupDataCon ddfs dcon)) + False -> do + writetag <- gensym "writetag" + after_tag <- gensym "after_tag" + start_tag_alloc <- gensym "start_tag_alloc" + end_tag_alloc <- gensym "end_tag_alloc" + start_scalars_alloc <- gensym "start_scalars_alloc" + dl <$> + LetE (start_tag_alloc,[],ProdTy [], Ext $ StartTagAllocation sloc) <$> + LetE (writetag,[], slocTy, Ext $ WriteTag dcon sloc) <$> + LetE (end_tag_alloc,[],ProdTy [], Ext $ EndTagAllocation sloc) <$> + LetE (start_scalars_alloc,[],ProdTy [], Ext $ StartScalarsAllocation sloc) <$> + LetE (after_tag,[], slocTy, Ext $ AddCursor sloc (L3.LitE 1)) <$> + go2 False after_tag (zip args (lookupDataCon ddfs dcon)) TimeIt e t b -> do Di e' <- go tenv senv e @@ -587,8 +717,12 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = -- is expressed in terms of corresponding cursor operations. -- See `cursorizeLocExp` LetLocE loc rhs bod -> do - let rhs_either = cursorizeLocExp denv tenv senv loc rhs - (bnds,tenv') = case M.lookup loc denv of + let (rhs_either, lTy) = cursorizeLocExp denv tenv senv (toLocVar loc) rhs + lTy' = case lTy of + MkTy2{unTy2} -> case unTy2 of + CursorTy -> CursorTy + MutableCursorTy -> MutableCursorTy + (bnds,tenv') = case M.lookup (toLocVar loc) denv of Nothing -> ([],tenv) Just vs -> let extended = M.fromList [ (v, MkTy2 CursorTy) | (v,_,CursorTy,_) <- vs] in (vs, M.union extended tenv) @@ -597,14 +731,14 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = let tenv''' = M.union tenv' tenv'' case rhs of FromEndLE{} -> - if isBound loc tenv - then go (M.insert loc (MkTy2 CursorTy) tenv''') senv' bod + if isBound (toLocVar loc) tenv + then go (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv''') senv' bod -- Discharge bindings that were waiting on 'loc'. - else onDi (mkLets (bnds' ++ [(loc,[],CursorTy,rhs')] ++ bnds)) <$> - go (M.insert loc (MkTy2 CursorTy) tenv') senv' bod + else onDi (mkLets (bnds' ++ [((toLocVar loc),[],lTy',rhs')] ++ bnds)) <$> + go (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv') senv' bod -- Discharge bindings that were waiting on 'loc'. - _ -> onDi (mkLets (bnds' ++ [(loc,[],CursorTy,rhs')] ++ bnds)) <$> - go (M.insert loc (MkTy2 CursorTy) tenv''') senv' bod + _ -> onDi (mkLets (bnds' ++ [((toLocVar loc),[],lTy',rhs')] ++ bnds)) <$> + go (M.insert (toLocVar loc) (MkTy2 CursorTy) tenv''') senv' bod Left denv' -> onDi (mkLets bnds) <$> cursorizePackedExp ddfs fundefs denv' tenv' senv bod @@ -641,10 +775,14 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = else do start <- gensym "start" end <- gensym "end" + let fromTy = case from of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy return $ Di $ (mkLets [("_",[],ProdTy [],Ext (IndirectionBarrier tycon ((toLocVar from),(toLocVar from_reg),(toLocVar to),(toLocVar to_reg)))), - (start, [], CursorTy, VarE (toLocVar from)), - (end, [], CursorTy, Ext $ AddCursor (toLocVar from) (L3.LitE 9))] + (start, [], fromTy, VarE (toLocVar from)), + (end, [], fromTy, Ext $ AddCursor (toLocVar from) (L3.LitE 9))] (MkProdE [VarE start, VarE end])) AddFixed{} -> error "cursorizePackedExp: AddFixed not handled." @@ -654,9 +792,9 @@ cursorizePackedExp ddfs fundefs denv tenv senv ex = LetAvail vs bod -> do onDi (Ext . L3.LetAvail vs) <$> go tenv senv bod - AllocateTagHere v tycon -> pure <$> dl <$> Ext $ L3.AllocateTagHere v tycon + AllocateTagHere v tycon -> pure <$> dl <$> Ext $ L3.AllocateTagHere (toLocVar v) tycon - AllocateScalarsHere v -> pure <$> dl <$> Ext $ L3.AllocateScalarsHere v + AllocateScalarsHere v -> pure <$> dl <$> Ext $ L3.AllocateScalarsHere (toLocVar v) SSPush a b c d -> pure <$> dl <$> Ext $ L3.SSPush a b c d SSPop a b c -> pure <$> dl <$> Ext $ L3.SSPop a b c @@ -691,14 +829,22 @@ cursorizeReadPackedFile ddfs fundefs denv tenv senv isPackedContext v path tyc r -- -- i.e `loc_a` may not always be bound. If that's the case, don't process `loc_b` -- now. Instead, add it to the dependency environment. -cursorizeLocExp :: DepEnv -> TyEnv Ty2 -> SyncEnv -> LocVar -> LocExp -> Either DepEnv (Exp3, [Binds Exp3], TyEnv Ty2, SyncEnv) +cursorizeLocExp :: DepEnv -> TyEnv Ty2 -> SyncEnv -> LocVar -> LocExp -> (Either DepEnv (Exp3, [Binds Exp3], TyEnv Ty2, SyncEnv), Ty2) cursorizeLocExp denv tenv senv lvar locExp = case locExp of AfterConstantLE i loc -> - let rhs = Ext $ AddCursor (toLocVar loc) (LitE i) + let locTy = case loc of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + locTy' = case loc of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + rhs = dbgTraceIt "Print loc here:" dbgTraceIt (sdoc (locTy, loc, lvar, isBound (toLocVar loc) tenv)) dbgTraceIt "End\n" Ext $ AddCursor (toLocVar loc) (LitE i) in if isBound (toLocVar loc) tenv - then Right (rhs, [], tenv, senv) - else Left$ M.insertWith (++) (toLocVar loc) [(lvar,[],CursorTy,rhs)] denv + then (Right (rhs, [], tenv, senv), MkTy2 locTy) + else (Left$ M.insertWith (++) (toLocVar loc) [(lvar,[],locTy',rhs)] denv, MkTy2 locTy) -- TODO: handle product types here {- [2018.03.07]: @@ -712,7 +858,15 @@ For BigInfinite regions, this is simple: But Infinite regions do not support sizes yet. Re-enable this later. -} AfterVariableLE v locarg was_stolen -> do - let vty = case M.lookup v tenv of + let locTy = case locarg of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + locTy' = case locarg of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + vty = case M.lookup v tenv of Just ty -> ty Nothing -> case M.lookup v senv of Just pending_bnds -> @@ -751,32 +905,41 @@ But Infinite regions do not support sizes yet. Re-enable this later. oth -> error $ "cursorizeLocExp: AfterVariable TODO " ++ sdoc oth if isBound loc tenv then if was_stolen - then Right (bod, [], tenv, senv) + then (Right (bod, [], tenv, senv), MkTy2 locTy) -- The continuation was not stolen. It's safe to discharge all -- pending bindings of this particular variable. else do case M.lookup v senv of - Nothing -> Right (bod, [], tenv, senv) + Nothing -> (Right (bod, [], tenv, senv), MkTy2 locTy) Just pending_bnds -> do let tenv' = foldr (\(v1,_,_,ty2,_) env -> M.insert v1 ty2 env) tenv pending_bnds bnds = map (\(a,b,c,_,e) -> (a,b,c,e)) pending_bnds - Right (bod, bnds, tenv', M.delete v senv) - else Left $ M.insertWith (++) loc [(lvar,[],CursorTy,bod)] denv + (Right (bod, bnds, tenv', M.delete v senv), MkTy2 locTy) + else (Left $ M.insertWith (++) loc [(lvar,[],locTy',bod)] denv, MkTy2 locTy) FromEndLE locarg -> - let loc = toLocVar locarg in + let locTy = case locarg of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + locTy' = case locarg of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + loc = toLocVar locarg + in if isBound loc tenv - then Right (VarE loc, [], tenv, senv) - else Left$ M.insertWith (++) loc [(lvar,[],CursorTy,VarE loc)] denv + then (Right (VarE loc, [], tenv, senv), MkTy2 locTy) + else (Left$ M.insertWith (++) loc [(lvar,[],locTy',VarE loc)] denv, MkTy2 locTy) StartOfRegionLE r -> case r of - GlobR v _ -> Right (VarE v, [], tenv, senv) - VarR v -> Right (VarE v, [], tenv, senv) - DynR v _ -> Right (VarE v, [], tenv, senv) + GlobR v _ -> (Right (VarE v, [], tenv, senv), MkTy2 CursorTy) + VarR v -> (Right (VarE v, [], tenv, senv), MkTy2 CursorTy) + DynR v _ -> (Right (VarE v, [], tenv, senv), MkTy2 CursorTy) -- TODO: docs - MMapR _v -> Left denv + MMapR _v -> (Left denv, MkTy2 CursorTy) - FreeLE -> Left denv -- AUDIT: should we just throw away this information? + FreeLE -> (Left denv, MkTy2 CursorTy) -- AUDIT: should we just throw away this information? InRegionLE{} -> error $ "cursorizeExp: TODO InRegionLE" @@ -791,7 +954,7 @@ But Infinite regions do not support sizes yet. Re-enable this later. cursorizeAppE :: DDefs Ty2 -> FunDefs2 -> DepEnv -> TyEnv Ty2 -> SyncEnv -> Exp2 -> PassM Exp3 cursorizeAppE ddfs fundefs denv tenv senv ex = case ex of - AppE f locs args -> do + AppE (f, t) locs args -> do let fnTy = case M.lookup f fundefs of Just g -> funTy g Nothing -> error $ "Unknown function: " ++ sdoc f @@ -808,8 +971,8 @@ cursorizeAppE ddfs fundefs denv tenv senv ex = (zip in_tys args) let starts = zipWith giveStarts (map unTy2 argTys) args' let bod = case locs of - [] -> AppE f [] starts - _ -> AppE f [] ([VarE (toLocVar loc) | loc <- outs] ++ starts) + [] -> AppE (f, t) [] starts + _ -> AppE (f, t) [] ([VarE (toLocVar loc) | loc <- outs] ++ starts) asserts <- foldrM (\loc acc -> case loc of Loc LREM{lremEndReg,lremLoc} -> do @@ -923,11 +1086,16 @@ cursorizeSpawn isPackedContext ddfs fundefs denv tenv senv ex = do LetE (v, locs, MkTy2 ty, (SpawnE fn applocs args)) bod | isPackedTy ty -> do - rhs' <- fromDi <$> cursorizePackedExp ddfs fundefs denv tenv senv (AppE fn applocs args) + rhs' <- fromDi <$> cursorizePackedExp ddfs fundefs denv tenv senv (AppE (fn, NoTail) applocs args) let rhs'' = case rhs' of - AppE fn' applocs' args' -> SpawnE fn' applocs' args' + AppE (fn', _) applocs' args' -> SpawnE fn' applocs' args' _ -> error "cursorizeSpawn" fresh <- gensym "tup_packed" + -- let lambdaTy = (\_ l -> let locArg = filter (\(LRM l' _ m) -> l' == l) locVars + -- in case locArg of + -- [LRM _ _ OutputMutable] -> ProdTy [MutableCursorTy, CursorTy] + -- _ -> ProdTy [CursorTy, CursorTy] + -- ) let ty' = case locs of [] -> cursorizeTy ty xs -> ProdTy ([CursorTy | _ <- xs] ++ [cursorizeTy ty]) @@ -959,9 +1127,9 @@ cursorizeSpawn isPackedContext ddfs fundefs denv tenv senv ex = do return $ mkLets bnds bod'' | hasPacked ty -> do - rhs' <- fromDi <$> cursorizePackedExp ddfs fundefs denv tenv senv (AppE fn applocs args) + rhs' <- fromDi <$> cursorizePackedExp ddfs fundefs denv tenv senv (AppE (fn, NoTail) applocs args) let rhs'' = case rhs' of - AppE fn' applocs' args' -> SpawnE fn' applocs' args' + AppE (fn', _) applocs' args' -> SpawnE fn' applocs' args' _ -> error $ "cursorizeSpawn: this should've been an AppE. Got" ++ sdoc rhs' fresh <- gensym "tup_haspacked" let ty' = case locs of @@ -981,9 +1149,9 @@ cursorizeSpawn isPackedContext ddfs fundefs denv tenv senv ex = do mkLets bnds <$> go tenv' senv' bod | otherwise -> do - rhs' <- cursorizeExp ddfs fundefs denv tenv senv (AppE fn applocs args) + rhs' <- cursorizeExp ddfs fundefs denv tenv senv (AppE (fn, NoTail) applocs args) let rhs'' = case rhs' of - AppE fn' applocs' args' -> SpawnE fn' applocs' args' + AppE (fn', _) applocs' args' -> SpawnE fn' applocs' args' _ -> error "cursorizeSpawn" case locs of [] -> LetE (v,[],curDict $ stripTyLocs ty, rhs'') <$> @@ -1056,13 +1224,27 @@ cursorizeLet isPackedContext ddfs fundefs denv tenv senv (v,locs,(MkTy2 ty),rhs) | isPackedTy ty = do rhs' <- fromDi <$> cursorizePackedExp ddfs fundefs denv tenv senv rhs fresh <- gensym "tup_packed" + let getLocTy = (\l -> case l of + Loc LREM{lremLoc, lremReg, lremEndReg, lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + EndWitness LREM{lremMode} v -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + _ -> CursorTy + ) + -- let lambdaTy = (\_ l -> let locArg = filter (\(LRM l' _ m) -> l' == l) locVars + -- in case locArg of + -- [LRM _ _ OutputMutable] -> ProdTy [MutableCursorTy, CursorTy] + -- _ -> ProdTy [CursorTy, CursorTy] + -- ) let ty' = case locs of [] -> cursorizeTy ty - xs -> ProdTy ([CursorTy | _ <- xs] ++ [cursorizeTy ty]) + xs -> dbgTraceIt "Print in cursorize Let" dbgTraceIt (sdoc (xs, ty, rhs', fresh)) dbgTraceIt "Print End\n." ProdTy (P.map getLocTy xs ++ [cursorizeTy ty]) tenv' = L.foldr (\(a,b) acc -> M.insert a b acc) tenv $ [(v, MkTy2 ty),(fresh, MkTy2 ty'),(toEndV v, MkTy2 (projTy 1 ty'))] ++ - [(toLocVar loc,MkTy2 CursorTy) | loc <- locs] + [(toLocVar loc,MkTy2 $ getLocTy loc) | loc <- locs] -- TyEnv Ty2 and L3 expresssions are tagged with different types ty'' = curDict $ stripTyLocs ty' @@ -1491,7 +1673,12 @@ unpackDataCon ddfs fundefs denv1 tenv1 senv isPacked scrtCur (dcon,vlocs1,rhs) = case (vlocs, tys) of ([], []) -> processRhs denv tenv ((v,locarg):rst_vlocs, (MkTy2 ty):rst_tys) -> - let loc = toLocVar locarg in + let loc = toLocVar locarg + locTy = case locarg of + Loc LREM{lremMode} -> case lremMode of + OutputMutable -> MutableCursorTy + _ -> CursorTy + in case ty of -- Int, Sym, or Bool _ | isScalarTy ty -> do @@ -1517,13 +1704,13 @@ unpackDataCon ddfs fundefs denv1 tenv1 senv isPacked scrtCur (dcon,vlocs1,rhs) = loc_binds = case M.lookup v indirections_env of -- This is the first packed value. We can unpack this. Nothing -> - [(loc, [], CursorTy, VarE cur)] + [(loc, [], locTy, VarE cur)] -- We need to access this using a random access node Just (_var_loc, (ind_var, ind_loc)) -> - [ (tmp_loc,[],CursorTy, Ext $ AddCursor ind_loc (VarE ind_var)) - , (loc,[],CursorTy, Ext $ AddCursor tmp_loc (LitE 8)) ] + [ (tmp_loc,[],locTy, Ext $ AddCursor ind_loc (VarE ind_var)) + , (loc,[],locTy, Ext $ AddCursor tmp_loc (LitE 8)) ] bod <- go (toEndV v) rst_vlocs rst_tys indirections_env denv tenv' - return $ mkLets (loc_binds ++ [(v, [], CursorTy, VarE loc)]) bod + return $ mkLets (loc_binds ++ [(v, [], locTy, VarE loc)]) bod _ -> error $ "unpackWithRelRAN: Unexpected field " ++ sdoc (v,loc) ++ ":" ++ sdoc ty @@ -1640,3 +1827,356 @@ mkDi x ls = Di $ MkProdE [x, MkProdE ls] curDict :: UrTy a -> UrTy a curDict (SymDictTy ar _ty) = SymDictTy ar CursorTy curDict ty = ty + +evaluateProjectionsLazily :: LazyProjectionEnv -> Exp3 -> Exp3 +evaluateProjectionsLazily env exp3 = let + (env', exp3') = releaseProjetions env exp3 + in dbgTraceIt (sdoc $ (M.elems env', M.elems env')) exp3' + + +collectProjections :: LazyProjectionEnv -> Exp3 -> (LazyProjectionEnv, Exp3) +collectProjections env exp = case exp of + VarE{} -> (env, exp) + LitE{} -> (env, exp) + CharE{} -> (env, exp) + FloatE{} -> (env, exp) + LitSymE v -> (env, exp) + AppE (v, t) locs args -> let results = P.map (collectProjections env) args + env' = M.unions $ P.map fst results + args' = P.map snd results + in (M.union env env', AppE (v, t) locs args') + PrimAppE p args -> let results = P.map (collectProjections env) args + env' = M.unions $ P.map fst results + args' = P.map snd results + in (M.union env env', PrimAppE p args') + LetE (v,loc,ty,rhs) bod -> case rhs of + ProjE i e -> let env' = M.insert v (loc, ty, rhs) env + (env'', bod') = collectProjections env' bod + in if M.null env'' + then dbgTraceIt ("Here") dbgTraceIt (sdoc (env', M.elems env', env'', M.elems env'')) dbgTraceIt ("Here End\n") (M.union env env', bod') + else dbgTraceIt ("Here") dbgTraceIt (sdoc (env', M.elems env', env'', M.elems env'')) dbgTraceIt ("Here End\n") (M.union env env'', bod') + _ -> let (env', rhs') = dbgTraceIt ("Here1") collectProjections env rhs + (env'', bod') = dbgTraceIt ("Here2") collectProjections env' bod + in if M.null env'' + then (M.union env env', LetE (v, loc, ty, rhs') bod') + else (M.union env env'', LetE (v, loc, ty, rhs') bod') + IfE a b c -> let (env', a') = collectProjections env a + (env'', b') = collectProjections env' b + (env''', c') = collectProjections env'' c + in (M.unions [env, env', env'', env'''], IfE a' b' c') + -- MkProdE ls -> let results = P.map (collectProjections env) ls + -- env' = M.unions $ P.map fst results + -- ls' = P.map snd results + -- in (env', MkProdE ls') + MkProdE ls -> (env, exp) + ProjE i e -> let (env', e') = collectProjections env e + in (env', ProjE i e') + CaseE scrt brs -> let results = P.map (\(a, b, c) -> let (env', c') = collectProjections env c + in (env', (a, b, c')) + ) brs + env'' = M.unions $ P.map fst results + brs' = P.map snd results + in (M.union env env'', CaseE scrt brs') + DataConE loc dcon ls -> let results = P.map (collectProjections env) ls + env' = M.unions $ P.map fst results + ls' = P.map snd results + in (M.union env env', DataConE loc dcon ls') + TimeIt e d b -> let (env', e') = collectProjections env e + in (M.union env env', TimeIt e' d b) + WithArenaE v e -> let (env', e') = collectProjections env e + in (M.union env env', WithArenaE v e') + SpawnE v locs ls -> let results = P.map (collectProjections env) ls + env' = M.unions $ P.map fst results + ls' = P.map snd results + in (M.union env env', SpawnE v locs ls') + SyncE -> (env, SyncE) + Ext ext -> + case ext of + WriteScalar a b ex -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ WriteScalar a b ex') + AddCursor c ex -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ AddCursor c ex') + SubPtr{} -> (env, exp) + WriteCursor c ex -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ WriteCursor c ex') + --TagCursor{} -> (env, exp) + ReadScalar{} -> (env, exp) + ReadTag{} -> (env, exp) + WriteTag{} -> (env, exp) + ReadList{} -> (env, exp) + WriteList a ex b -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ WriteList a ex' b) + ReadVector{} -> (env, exp) + WriteVector a ex b -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ WriteVector a ex' b) + NewBuffer{} -> (env, exp) + NewParBuffer{} -> (env, exp) + ScopedBuffer{} -> (env, exp) + ScopedParBuffer{} -> (env, exp) + EndOfBuffer{} -> (env, exp) + MMapFileSize{} -> (env, exp) + SizeOfPacked{} -> (env, exp) + SizeOfScalar{} -> (env, exp) + --BoundsCheck{} -> (env, exp) + ReadCursor{} -> (env, exp) + WriteTaggedCursor{}-> (env, exp) + ReadTaggedCursor{} -> (env, exp) + IndirectionBarrier{} -> (env, exp) + NullCursor -> (env, exp) + BumpArenaRefCount{}-> error "collect_syms: BumpArenaRefCount not handled." + --RetE locs ls -> let results = P.map (collectProjections env) ls + -- env' = M.unions $ P.map fst results + -- ls' = P.map snd results + -- in (env', Ext $ RetE locs ls') + --GetCilkWorkerNum -> (env, exp) + --LetAvail a bod -> let (env', bod') = collectProjections env bod + -- in (env', Ext $ LetAvail a bod') + --AllocateTagHere{} -> (env, exp) + --AllocateScalarsHere{} -> (env, exp) + StartTagAllocation{} -> (env, exp) + EndTagAllocation{} -> (env, exp) + StartScalarsAllocation{} -> (env, exp) + EndScalarsAllocation{} -> (env, exp) + --SSPush{} -> (env, exp) + --SSPop{} -> (env, exp) + Assert ex -> let (env', ex') = collectProjections env ex + in (M.union env env', Ext $ Assert ex) + _ -> (env, exp) + MapE{} -> (env, exp) + FoldE{} -> (env, exp) + + +releaseProjetions :: LazyProjectionEnv -> Exp3 -> (LazyProjectionEnv, Exp3) +releaseProjetions env exp = case exp of + VarE v -> case M.lookup v env of + Just (loc, ty, exp) -> let exp' = dbgTraceIt (sdoc v) LetE (v, loc, ty, exp) $ VarE v + env' = M.delete v env + in (env', exp') + Nothing -> (env, exp) + LitE{} -> (env, exp) + CharE{} -> (env, exp) + FloatE{} -> (env, exp) + LitSymE v -> case M.lookup v env of + Just (loc, ty, exp) -> let exp' = LetE (v, loc, ty, exp) $ LitSymE v + env' = M.delete v env + in (env', exp') + Nothing -> (env, exp) + AppE (v, t) locs args -> let results = P.map (releaseProjetions env) args + env' = M.unions $ P.map fst results + args' = P.map snd results + in (env', AppE (v, t) locs args') + PrimAppE p args -> let results = P.map (releaseProjetions env) args + env' = M.unions $ P.map fst results + args' = P.map snd results + in (env', PrimAppE p args') + LetE (v,loc,ty,rhs) bod -> let (env', rhs') = releaseProjetions env rhs + (env'', bod') = releaseProjetions env bod + in (env'', LetE (v, loc, ty, rhs') bod') + IfE a b c -> let (env', a') = releaseProjetions env a + (env'', b') = releaseProjetions env' b + (env''', c') = releaseProjetions env'' c + in (env''', IfE a' b' c') + MkProdE ls -> let (env', exp') = replaceTuples env exp + in (env', exp') + ProjE i e -> let (env', e') = releaseProjetions env e + in (env', ProjE i e') + CaseE scrt brs -> let brs' = P.map (\(a, b, c) -> let (env', c') = collectProjections env c + (env'', c'') = dbgTraceIt ("Env at Case:") dbgTraceIt (sdoc $ (a, env', M.elems env')) dbgTraceIt ("End\n") releaseProjetions env' c' + in (a, b, c'') + ) brs + in (env, CaseE scrt brs') + DataConE loc dcon ls -> let results = P.map (releaseProjetions env) ls + env' = M.unions $ P.map fst results + ls' = P.map snd results + in (env', DataConE loc dcon ls') + TimeIt e d b -> let (env', e') = releaseProjetions env e + in (env', TimeIt e' d b) + WithArenaE v e -> let (env', e') = releaseProjetions env e + in (env', WithArenaE v e') + SpawnE v locs ls -> let results = P.map (releaseProjetions env) ls + env' = M.unions $ P.map fst results + ls' = P.map snd results + in (env', SpawnE v locs ls') + SyncE -> (env, SyncE) + Ext ext -> + case ext of + WriteScalar a v ex -> let gf = gFreeVars ex + freeVars = S.toList $ S.union (S.singleton v) gf + newEnv = P.foldr (\v e -> M.delete v e) env freeVars + (env'', ex') = releaseProjetions newEnv ex + (env''', letLst) = P.foldr (\v (e'', expr) -> case M.lookup v e'' of + Nothing -> (e'', expr) + Just (loc', ty', expr') -> let e''' = M.delete v e'' + in (e''', LetE (v, loc', ty', expr') $ expr) + ) (env, Ext $ WriteScalar a v ex') freeVars + in (env'', letLst) + AddCursor c ex -> let gf = gFreeVars ex + freeVars = S.toList $ S.union (S.singleton c) gf + newEnv = P.foldr (\v e -> M.delete v e) env freeVars + (env'', ex') = releaseProjetions newEnv ex + (env''', letLst) = P.foldr (\v (e'', expr) -> case M.lookup v e'' of + Nothing -> (e'', expr) + Just (loc', ty', expr') -> let e''' = M.delete v e'' + in (e''', LetE (v, loc', ty', expr') $ expr) + ) (env, Ext $ AddCursor c ex') freeVars + in (env'', letLst) + -- case M.lookup c env of + -- Just (loc, ty, rhs) -> let env' = M.delete c env + -- (env'', ex') = releaseProjetions env' ex + -- in (env'', LetE (c, loc, ty, rhs) $ Ext $ AddCursor c ex') + + -- Nothing -> let (env', ex') = releaseProjetions env ex + -- in (env', Ext $ AddCursor c ex') + SubPtr{} -> (env, exp) + WriteCursor c ex -> let (env', ex') = releaseProjetions env ex + in (env', Ext $ WriteCursor c ex') + --TagCursor{} -> (env, exp) + ReadScalar{} -> (env, exp) + ReadTag{} -> (env, exp) + WriteTag{} -> (env, exp) + ReadList{} -> (env, exp) + WriteList a ex b -> let (env', ex') = releaseProjetions env ex + in (env', Ext $ WriteList a ex' b) + ReadVector{} -> (env, exp) + WriteVector a ex b -> let (env', ex') = releaseProjetions env ex + in (env', Ext $ WriteVector a ex' b) + NewBuffer{} -> (env, exp) + NewParBuffer{} -> (env, exp) + ScopedBuffer{} -> (env, exp) + ScopedParBuffer{} -> (env, exp) + EndOfBuffer{} -> (env, exp) + MMapFileSize{} -> (env, exp) + SizeOfPacked{} -> (env, exp) + SizeOfScalar{} -> (env, exp) + --BoundsCheck{} -> (env, exp) + ReadCursor{} -> (env, exp) + WriteTaggedCursor{}-> (env, exp) + ReadTaggedCursor{} -> (env, exp) + IndirectionBarrier{} -> (env, exp) + NullCursor -> (env, exp) + BumpArenaRefCount{}-> error "collect_syms: BumpArenaRefCount not handled." + --RetE locs ls -> let results = P.map (releaseProjetions env) ls + -- env' = M.unions $ P.map fst results + -- ls' = P.map snd results + -- in (env', Ext $ RetE locs ls') + --GetCilkWorkerNum -> (env, exp) + --LetAvail a bod -> let (env', bod') = releaseProjetions env bod + -- in (env', Ext $ LetAvail a bod') + --AllocateTagHere{} -> (env, exp) + --AllocateScalarsHere{} -> (env, exp) + StartTagAllocation{} -> (env, exp) + EndTagAllocation{} -> (env, exp) + StartScalarsAllocation{} -> (env, exp) + EndScalarsAllocation{} -> (env, exp) + --SSPush{} -> (env, exp) + --SSPop{} -> (env, exp) + Assert ex -> let (env', ex') = releaseProjetions env ex + in (env', Ext $ Assert ex) + _ -> (env, exp) + MapE{} -> (env, exp) + FoldE{} -> (env, exp) + + +replaceTuples :: LazyProjectionEnv -> Exp3 -> (LazyProjectionEnv, Exp3) +replaceTuples env exp = case exp of + MkProdE [] -> (env, exp) + MkProdE ls -> let nested_tuple = P.last ls + in case nested_tuple of + MkProdE ls' -> let (res, exp', _ , env') = P.foldr lambda (True, Nothing, Nothing, env) ls' + in if res + then let ls'' = P.init ls + ls''' = ls'' ++ [fromJust exp'] + (res', exp'', _ , env'') = dbgTraceIt ("Print new Prod: ") dbgTraceIt (sdoc (ls''', env')) dbgTraceIt ("\n") P.foldr lambda (True, Nothing, Nothing, env') ls''' + in if res' + then dbgTraceIt ("Branch1: ") dbgTraceIt (sdoc (exp'')) dbgTraceIt ("\n") (env'', fromJust exp'') + else let freeVarsInProd = P.concatMap (\exp -> S.toList $ gFreeVars exp) ls''' + (env''', letLst) = P.foldr (\v (e'', expr) -> case M.lookup v e'' of + Nothing -> (e'', expr) + Just (loc', ty', expr') -> let e''' = M.delete v e'' + in (e''', LetE (v, loc', ty', expr') $ expr) + ) (env', MkProdE ls''') freeVarsInProd + in dbgTraceIt ("Branch2: ") dbgTraceIt (sdoc (letLst)) dbgTraceIt ("\n") (env''', letLst) + else let freeVarsInProd = P.concatMap (\exp -> S.toList $ gFreeVars exp) ls + (env''', letLst) = P.foldr (\v (e'', expr) -> case M.lookup v e'' of + Nothing -> (e'', expr) + Just (loc', ty', expr') -> let e''' = M.delete v e'' + in (e''', LetE (v, loc', ty', expr') $ expr) + ) (env, MkProdE ls) freeVarsInProd + in dbgTraceIt ("Branch2: ") dbgTraceIt (sdoc (letLst)) dbgTraceIt ("\n") (env''', letLst) + _ -> let (res, exp', _, env') = P.foldr lambda (True, Nothing, Nothing, env) ls + in if res + then (env', fromJust exp') + else let freeVarsInProd = P.concatMap (\exp -> S.toList $ gFreeVars exp) ls + (env''', letLst) = P.foldr (\v (e'', expr) -> case M.lookup v e'' of + Nothing -> (e'', expr) + Just (loc', ty', expr') -> let e''' = M.delete v e'' + in (e''', LetE (v, loc', ty', expr') $ expr) + ) (env, MkProdE ls) freeVarsInProd + in dbgTraceIt ("Branch2: ") dbgTraceIt (sdoc (letLst)) dbgTraceIt ("\n") (env''', letLst) + where + lambda = (\expr (accum, tup, fVars, env') -> case expr of + VarE v -> case M.lookup v env' of + Just (loc, ty, exp) -> if accum == False + then (accum && False, tup, fVars, env') + else + case exp of + ProjE i exp' -> let freeVars = gFreeVars exp' + env'' = M.delete v env' + in case (tup, fVars) of + (Nothing, Nothing) -> (accum && True, Just exp', Just freeVars, env'') + (x, Just y) -> if y == freeVars + then (accum && True, x, Just y, env'') + else (accum && False, x, Just y, env') + -- (Nothing, Just y) -> if y == freeVars + -- then (True, Just exp', Just y, env''') + -- else (False, Just exp', Just y, env'') + -- (Just x, Nothing) -> (True, Just x, Just freeVars, env''') + + + + Nothing -> (accum && False, tup, fVars, env') + _ -> let fVars' = gFreeVars expr + in case fVars of + Nothing -> (accum, tup, fVars, env') + Just f -> if f == fVars' + then (True && accum, tup, fVars, env') + else (False && accum, tup, fVars, env') + + ) + + +-- let (result, e, fv, env') = P.foldr (\ee (accum, tup, fvars, env'') -> case ee of +-- VarE v -> case M.lookup v env'' of +-- Just (loc, ty, exp) -> if accum == False +-- then (False, tup, fvars, env'') +-- else +-- case exp of +-- ProjE i exp' -> let freeVars = gFreeVars exp' +-- env''' = M.delete v env'' +-- in case (tup, fvars) of +-- (Nothing, Nothing) -> (True, Just exp', Just freeVars, env''') +-- (x, Just y) -> if y == freeVars +-- then (True, x, Just y, env''') +-- else (False, x, Just y, env'') +-- (Nothing, Just y) -> if y == freeVars +-- then (True, Just exp', Just y, env''') +-- else (False, Just exp', Just y, env'') +-- (Just x, Nothing) -> (True, Just x, Just freeVars, env''') + + + +-- Nothing -> (False, tup, fvars, env'') +-- _ -> let (env''', ee') = releaseProjetions env'' ee +-- in (True, Just ee', fvars, env''') + +-- ) (True, Nothing, Nothing, env) ls +-- in if result +-- then +-- case e of +-- Just exp -> (env', exp) +-- Nothing -> (env, MkProdE ls) +-- else +-- let results = P.map (releaseProjetions env) ls +-- env' = M.unions $ P.map fst results +-- ls' = P.map snd results +-- in (env', MkProdE ls') \ No newline at end of file diff --git a/gibbon-compiler/src/Gibbon/Passes/DirectL3.hs b/gibbon-compiler/src/Gibbon/Passes/DirectL3.hs index ec862b403..a02bb6653 100644 --- a/gibbon-compiler/src/Gibbon/Passes/DirectL3.hs +++ b/gibbon-compiler/src/Gibbon/Passes/DirectL3.hs @@ -68,7 +68,7 @@ directL3 prg@(Prog ddfs fndefs mnExp) = do Ext (BenchE fn _locs args b) -> let fn_ty = lookupFEnv fn env2 ret_ty = snd fn_ty - ex' = TimeIt (AppE fn [] args) ret_ty b + ex' = TimeIt (AppE (fn, NoTail) [] args) ret_ty b in go env2 ex' Ext (AddFixed{}) -> error "directL3: AddFixed not handled." Ext (StartOfPkdCursor{}) -> error "directL3: StartOfPkdCursor not handled." diff --git a/gibbon-compiler/src/Gibbon/Passes/FollowPtrs.hs b/gibbon-compiler/src/Gibbon/Passes/FollowPtrs.hs index e0ffff9fa..6406518f7 100644 --- a/gibbon-compiler/src/Gibbon/Passes/FollowPtrs.hs +++ b/gibbon-compiler/src/Gibbon/Passes/FollowPtrs.hs @@ -56,14 +56,14 @@ followPtrs (Prog ddefs fundefs mainExp) = do wc <- gensym "wildcard" let indir_bod = Ext $ LetLocE jump (AfterConstantLE 8 indir_ptrloc) $ (if isPrinterName funName then LetE (wc,[],ProdTy[],PrimAppE PrintSym [LitSymE (toVar " ->i ")]) else id) $ - LetE (callv,endofs,out_ty,AppE funName (in_locs ++ out_locs) args) $ + LetE (callv,endofs,out_ty,AppE (funName, NoTail) (in_locs ++ out_locs) args) $ Ext (RetE ret_endofs callv) let indir_dcon = fst $ fromJust $ L.find (isIndirectionTag . fst) dataCons let indir_br = (indir_dcon,[(indir_ptrv,indir_ptrloc)],indir_bod) ---------------------------------------- let redir_dcon = fst $ fromJust $ L.find (isRedirectionTag . fst) dataCons let redir_bod = (if isPrinterName funName then LetE (wc,[],ProdTy[],PrimAppE PrintSym [LitSymE (toVar " ->r ")]) else id) $ - LetE (callv,endofs,out_ty,AppE funName (in_locs ++ out_locs) args) $ + LetE (callv,endofs,out_ty,AppE (funName, NoTail) (in_locs ++ out_locs) args) $ Ext (RetE endofs callv) let redir_br = (redir_dcon,[(indir_ptrv,indir_ptrloc)],redir_bod) ---------------------------------------- diff --git a/gibbon-compiler/src/Gibbon/Passes/Freshen.hs b/gibbon-compiler/src/Gibbon/Passes/Freshen.hs index 52131efd5..ee929ee21 100644 --- a/gibbon-compiler/src/Gibbon/Passes/Freshen.hs +++ b/gibbon-compiler/src/Gibbon/Passes/Freshen.hs @@ -170,11 +170,11 @@ freshExp venv tvenv exp = Nothing -> return $ VarE (cleanFunName v) Just v' -> return $ VarE (cleanFunName v') - AppE v locs ls -> assert ([] == locs) $ do + AppE (v, t) locs ls -> assert ([] == locs) $ do ls' <- mapM go ls case M.lookup v venv of - Nothing -> return $ AppE (cleanFunName v) [] ls' - Just v' -> return $ AppE (cleanFunName v') [] ls' + Nothing -> return $ AppE (cleanFunName v, t) [] ls' + Just v' -> return $ AppE (cleanFunName v', t) [] ls' PrimAppE p es -> do es' <- mapM go es @@ -333,11 +333,11 @@ freshExp1 vs exp = Nothing -> return $ VarE v Just v' -> return $ VarE v' - AppE v locs ls -> assert ([] == locs) $ do + AppE (v, t) locs ls -> assert ([] == locs) $ do ls' <- mapM (freshExp1 vs) ls case M.lookup v vs of - Nothing -> return $ AppE (cleanFunName v) [] ls' - Just v' -> return $ AppE (cleanFunName v') [] ls' + Nothing -> return $ AppE (cleanFunName v, t) [] ls' + Just v' -> return $ AppE (cleanFunName v', t) [] ls' PrimAppE p es -> do es' <- mapM (freshExp1 vs) es diff --git a/gibbon-compiler/src/Gibbon/Passes/Fusion2.hs b/gibbon-compiler/src/Gibbon/Passes/Fusion2.hs index f024df735..7e4550af0 100644 --- a/gibbon-compiler/src/Gibbon/Passes/Fusion2.hs +++ b/gibbon-compiler/src/Gibbon/Passes/Fusion2.hs @@ -230,7 +230,7 @@ addOuterTailCall exp fName parName varType outerArgs = case ex of L1.LetE (v,ls,t, e1) e2 -> L1.LetE (v,ls,t, e1) (go e2) x -> - let newCall = AppE fName [] ( (VarE parName) :outerArgs) + let newCall = AppE (fName, TC) [] ( (VarE parName) :outerArgs) newLet = LetE (parName, [], varType, x) newCall in newLet {- This function≈ collect the following information for each defined variable: @@ -310,13 +310,13 @@ buildDefTable ex = go ex Nothing M.empty extractAppNameFromLet :: Exp1 -> Var -extractAppNameFromLet (LetE (Var symLet,_,_,(AppE var _ _ )) _) = var +extractAppNameFromLet (LetE (Var symLet,_,_,(AppE (var, _) _ _ )) _) = var extractLetSymbolFromLet :: Exp1 -> Symbol -extractLetSymbolFromLet (LetE (Var symLet,_,_,(AppE var _ _ )) _) = symLet +extractLetSymbolFromLet (LetE (Var symLet,_,_,(AppE (var, _) _ _ )) _) = symLet extractAppEName :: Exp1 -> Var -extractAppEName (AppE var _ _ ) = var +extractAppEName (AppE (var, _) _ _ ) = var extractAppEName x = error(show x) -- Takes the table, and candidates which are already processed and @@ -412,7 +412,7 @@ inline2 inlined_fun outer_fun = newVar <- gensym (toVar "innerCall") let rhs = (AppE - (funName inlined_fun) + (funName inlined_fun, NoTail) [] (L.map VarE ( newTraversedTreeArg:tail (funArgs inlined_fun)))) body = substE oldExp (VarE newVar) exp @@ -494,7 +494,7 @@ inline inlined_fun outer_fun arg_pos = do newVar <- gensym (toVar "innerCall") let rhs = (AppE - (funName inlined_fun) + (funName inlined_fun, NoTail) [] (L.map VarE (funArgs inlined_fun))) body = substE oldExp (VarE newVar) exp @@ -583,7 +583,7 @@ inlineConstructorConsumers fdefs exp = where go defTable ex = case ex of - original@(AppE fName loc parList) -> + original@(AppE (fName, _) loc parList) -> case (head parList) of VarE (Var symInner) -> case (getDefiningConstructor symInner defTable) of @@ -602,7 +602,7 @@ inlineConstructorConsumers fdefs exp = LetE (v, loc, t, lhs) bod -> let normal = LetE (v, loc, t, lhs) (go defTable bod) in case lhs of - original@(AppE fName loc parList) -> + original@(AppE (fName, _) loc parList) -> case (head parList) of VarE (Var symInner) -> case (getDefiningConstructor symInner defTable) of @@ -659,8 +659,8 @@ foldFusedCalls rule@(outerName, innerName, argPos, newName) body = let defTable = buildDefTable (body) go ex = case ex of - AppE fName loc argList -> - let notFolded = AppE fName loc argList + AppE (fName, t) loc argList -> + let notFolded = AppE (fName, t) loc argList in if fName == outerName then case (head argList) of VarE (Var symInner) -> @@ -669,7 +669,7 @@ foldFusedCalls rule@(outerName, innerName, argPos, newName) body = outerArgs = argList newCallArgs = (innerArgs L.++ tail argList) - in AppE newName loc newCallArgs + in AppE (newName, t) loc newCallArgs else notFolded _ -> notFolded else notFolded @@ -687,7 +687,7 @@ foldFusedCalls rule@(outerName, innerName, argPos, newName) body = Nothing -> toVar "dummy" Just entry -> case def entry of - AppE v _ _ -> v + AppE (v, _) _ _ -> v _ -> toVar "dummy" getArgs x defTable = case M.lookup x defTable of @@ -733,7 +733,7 @@ foldTupledFunctions bodyM newFun oldCalls outputPositions syncedArgs = getFirstArg ((AppE _ _ (h:_)))= h --`debug` ("oldCalls" L.++ (show oldCalls) L.++ --(render( pprint bodyM))) - let rhs' = AppE (funName newFun) [] args' + let rhs' = AppE (funName newFun, NoTail) [] args' -- `debug` ("new call" L.++ (show (AppE (funName newFun) [] args'))) let bindType = outTy (funTy newFun) let rhs'' = case t of @@ -995,8 +995,8 @@ renameFunction function newName = go ex = let oldName = funName function in case ex of - AppE name loc argList -> - AppE (if name==oldName then newName else name) loc argList + AppE (name, t) loc argList -> + AppE (if name==oldName then newName else name, t) loc argList PrimAppE x ls -> PrimAppE x (L.map f ls) where f item = go item LetE (v,loc,t,rhs) bod -> LetE (v,loc,t, go rhs) (go bod) @@ -1034,7 +1034,7 @@ buildTupleCandidatesTable fDefs exp argsVars = LetE (boundedVar,_,_,rhs) body -> let tb'= case rhs of - callExp@(AppE fName _ argList@((VarE inputTree):tail)) -> + callExp@(AppE (fName, t) _ argList@((VarE inputTree):tail)) -> let otherCalls = if M.member inputTree tb then (tb M.! inputTree) else [] in @@ -1192,7 +1192,7 @@ tuple ddefs fdefs oldExp_ argsVars depth= do let functionsToTuple = L.map getCalledFunDef callExpressions where getCalledFunDef callExpr = case callExpr of - (AppE fName _ _) -> case M.lookup fName fdefs of + (AppE (fName, _) _ _) -> case M.lookup fName fdefs of Just fdef -> fdef tupledFunction_ <- @@ -1244,7 +1244,7 @@ tuple ddefs fdefs oldExp_ argsVars depth= do in toVar ("_TUP_" L.++ L.foldl appendName "" ls L.++ syncedArgsText L.++ "_TUP_") - appendName str (AppE fName _ _) = + appendName str (AppE (fName, _) _ _) = str L.++ "_t_" L.++ fromVar fName computeSyncedArgs callExpressions = @@ -1280,11 +1280,11 @@ fixCalls exp fdefOld fdefNew redirectMap outputFromInput newName = go exp in CaseE e ls' LetE (Var y, loc, t, rhs) body-> case rhs of - AppE v ls args -> + AppE (v, tc) ls args -> if v == funName fdefOld then let t' = snd (funTy fdefNew) in - let rhs' = AppE newName ls args in + let rhs' = AppE (newName, tc) ls args in let body'= L.foldl (\ex (i, j )-> @@ -1321,7 +1321,7 @@ getOutputStartPositions fdefs callExpressions = in V.fromList ls where getCalledFunDef callExpr = case callExpr of - (AppE fName _ _) -> + (AppE (fName, _) _ _) -> case M.lookup fName fdefs of Just fdef -> case snd (funTy fdef) of ProdTy ls -> L.length ls @@ -1779,7 +1779,7 @@ collectVarToFuncs :: Exp1 -> M.Map Var Var collectVarToFuncs = recur where recur ex = case ex of - LetE (v, ls, t, (AppE f _ _)) body -> + LetE (v, ls, t, (AppE (f, _) _ _)) body -> M.insert v f (recur body) MkProdE{} -> M.empty @@ -2072,7 +2072,7 @@ removeRedundantInputExp fdefs exp mode = let (fdefs', body') = removeRedundantInputExp fdefs body mode boringCase = (fdefs', (LetE rhs body')) in (case bind of - x@( AppE fName loc args) -> + x@( AppE (fName, tc) loc args) -> if (L.isPrefixOf "_TUP" (fromVar fName) || L.isPrefixOf "_FUS" (fromVar fName) ) then @@ -2094,7 +2094,7 @@ removeRedundantInputExp fdefs exp mode = let (fNameNew, fdefsNew) = eliminateInputArgs fdefs' fName redundantPositions newCall = - AppE fNameNew loc + AppE (fNameNew, tc) loc (V.toList (V.ifilter (\idx _ -> M.notMember idx redundantPositions ) @@ -2104,7 +2104,7 @@ removeRedundantInputExp fdefs exp mode = boringCase otherwise -> boringCase) - x@(AppE fName loc args) -> + x@(AppE (fName, tc) loc args) -> if (L.isPrefixOf "_TUP" (fromVar fName) || L.isPrefixOf "_FUS" (fromVar fName) ) then @@ -2124,7 +2124,7 @@ removeRedundantInputExp fdefs exp mode = let (fNameNew, fdefsNew) = eliminateInputArgs fdefs fName redundantPositions newCall = - AppE fNameNew loc + AppE (fNameNew, tc) loc (V.toList (V.ifilter (\idx _ -> M.notMember idx redundantPositions ) diff --git a/gibbon-compiler/src/Gibbon/Passes/InferEffects.hs b/gibbon-compiler/src/Gibbon/Passes/InferEffects.hs index 0c663be7e..5cbf75610 100644 --- a/gibbon-compiler/src/Gibbon/Passes/InferEffects.hs +++ b/gibbon-compiler/src/Gibbon/Passes/InferEffects.hs @@ -88,7 +88,7 @@ inferExp ddfs fenv env dps expr = FloatE{} -> (S.empty, Nothing) LitSymE _ -> (S.empty, Nothing) - AppE v locs _e -> + AppE (v, _) locs _e -> -- Substitue locations used at this particular call-site in the function -- effects computed so far let orgLocs = allLocVars (fenv # v) diff --git a/gibbon-compiler/src/Gibbon/Passes/InferFunAllocs.hs b/gibbon-compiler/src/Gibbon/Passes/InferFunAllocs.hs index 2d3ea10db..07cc729b4 100644 --- a/gibbon-compiler/src/Gibbon/Passes/InferFunAllocs.hs +++ b/gibbon-compiler/src/Gibbon/Passes/InferFunAllocs.hs @@ -42,7 +42,7 @@ inferExp fenv expr = CharE{} -> False FloatE{} -> False LitSymE{} -> False - AppE v _locs _e -> funCanTriggerGC (fenv # v) + AppE (v, _) _locs _e -> funCanTriggerGC (fenv # v) PrimAppE _ ls -> any go ls LetE (_,_,_,rhs) bod -> go rhs || go bod IfE tst consq alt -> go tst || go consq || go alt diff --git a/gibbon-compiler/src/Gibbon/Passes/InferLocations.hs b/gibbon-compiler/src/Gibbon/Passes/InferLocations.hs index f8b64c8f7..50b96b1ee 100644 --- a/gibbon-compiler/src/Gibbon/Passes/InferLocations.hs +++ b/gibbon-compiler/src/Gibbon/Passes/InferLocations.hs @@ -145,7 +145,8 @@ convertFunTy (from,to,isPar) = do , arrEffs = S.empty , arrOut = to' , locRets = [] - , hasParallelism = isPar } + , hasParallelism = isPar + } where toLRM md ls = mapM (\v -> do r <- freshLocVar "r" @@ -322,7 +323,7 @@ inferExp' env exp bound dest= PackedTy _ loc -> substLoc (M.singleton loc lv2) arrty _ -> error "bindAllLocations: Not a packed type" a' = subst v1 (VarE v') a - in LetE (v',[],copyRetTy, AppE f lvs [VarE v1]) $ + in LetE (v',[],copyRetTy, AppE (f, NoTail) lvs [VarE v1]) $ Ext (LetLocE lv1 (AfterVariableLE v' lv2 True) a') in do res <- inferExp env exp dest @@ -474,7 +475,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = copyRetTy = case arrOut arrty of PackedTy _ loc -> substLoc (M.singleton loc lv2) (arrOut arrty) _ -> error "bindAfterLoc: Not a packed type" - let res' = (LetE (v',[],copyRetTy,AppE f lvs [VarE v1]) $ Ext (LetLocE lv1' (AfterVariableLE v' lv2' True) e), ty, cs) + let res' = (LetE (v',[],copyRetTy,AppE (f, NoTail) lvs [VarE v1]) $ Ext (LetLocE lv1' (AfterVariableLE v' lv2' True) e), ty, cs) res'' <- bindAfterLoc v res' return res'' else do (e',ty',cs') <- bindAfterLoc v (e,ty,cs) @@ -601,9 +602,9 @@ inferExp env@FullEnv{dataDefs} ex0 dest = SpawnE f _ args -> do - (ex0', ty, acs) <- inferExp env (AppE f [] args) dest + (ex0', ty, acs) <- inferExp env (AppE (f, NoTail) [] args) dest case ex0' of - AppE f' locs args' -> pure (SpawnE f' locs args', ty, acs) + AppE (f', _) locs args' -> pure (SpawnE f' locs args', ty, acs) oth -> err $ "SpawnE: " ++ sdoc oth SyncE -> pure (SyncE, ProdTy [], []) @@ -614,7 +615,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = LitSymE s -> return (LitSymE s, SymTy, []) - AppE f _ args -> + AppE (f, t) _ args -> do let arrty = lookupFEnv f env valTy <- freshTyLocs $ arrOut arrty -- /cc @vollmerm @@ -626,18 +627,18 @@ inferExp env@FullEnv{dataDefs} ex0 dest = SingleDest d -> do case locsInTy valTy of [outloc] -> unify d outloc - (return (L2.AppE f (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs)) + (return (L2.AppE (f, t) (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs)) (err$ "(AppE) Cannot unify" ++ sdoc d ++ " and " ++ sdoc outloc) _ -> err$ "AppE expected a single output location in type: " ++ sdoc valTy TupleDest ds -> case valTy of ProdTy tys -> unifyAll ds tys - (return (L2.AppE f (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs)) + (return (L2.AppE (f, t) (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs)) (err$ "(AppE) Cannot unify" ++ sdoc ds ++ " and " ++ sdoc tys) _ -> err$ "(AppE) Cannot unify" ++ sdoc dest ++ " and " ++ sdoc valTy NoDest -> case locsInTy valTy of - [] -> return (L2.AppE f (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs) + [] -> return (L2.AppE (f, t) (concatMap locsInTy atys ++ locsInDest dest) args', valTy, acs) _ -> err$ "(AppE) Cannot unify NoDest with " ++ sdoc valTy ++ ". This might be caused by a main expression having a packed type." ++ sdoc ex0 TimeIt e t b -> @@ -692,8 +693,8 @@ inferExp env@FullEnv{dataDefs} ex0 dest = (LitSymE _) -> return $ ArgFixed (fromJust $ sizeOfTy SymTy) (PrimAppE MkTrue []) -> return $ ArgFixed (fromJust $ sizeOfTy BoolTy) (PrimAppE MkFalse []) -> return $ ArgFixed (fromJust $ sizeOfTy BoolTy) - (AppE f lvs [(VarE v)]) -> do v' <- lift $ lift $ freshLocVar "cpy" - return $ ArgCopy v v' f lvs + (AppE (f, _) lvs [(VarE v)]) -> do v' <- lift $ lift $ freshLocVar "cpy" + return $ ArgCopy v v' f lvs _ -> err $ "Expected argument to be trivial, got " ++ (show arg) newLocs <- mapM finalLocVar locs let afterVar :: (DCArg, Maybe LocVar, Maybe LocVar) -> Maybe Constraint @@ -727,7 +728,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = -- bod <- return $ DataConE d k [ e' | (e',_,_) <- ls''] bod <- if (length ls) > 0 && (isCpyCall $ last [e | (e,_,_) <- ls']) then case last [e | (e,_,_) <- ls'] of - (AppE f lvs e) -> + (AppE (f, t) lvs e) -> let (ArgCopy _ v' _ copy_locs) = last argLs arrty = arrOut $ lookupFEnv f env -- Substitute the location occurring at the call site @@ -736,7 +737,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = copyRetTy = case arrty of PackedTy _ loc -> substLoc (M.singleton loc (last copy_locs)) arrty _ -> error "inferExp: Not a packed type" - in return $ LetE (v',[],copyRetTy, AppE f lvs e) $ + in return $ LetE (v',[],copyRetTy, AppE (f, t) lvs e) $ DataConE d k [ e' | (e',_,_) <- ls''] _ -> error "inferExp: Unexpected pattern " else return $ DataConE d k [ e' | (e',_,_) <- ls''] @@ -856,7 +857,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = case rhs of VarE{} -> err$ "Unexpected variable aliasing: " ++ (show ex0) - AppE f [] args -> do + AppE (f, t) [] args -> do let arrty = lookupFEnv f env valTy <- freshTyLocs $ arrOut arrty -- /cc @vollmerm @@ -870,7 +871,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = vcs <- tryNeedRegion (locsInTy valTy) ty'' $ acs ++ cs'' fcs <- tryInRegion vcs -- fcs <- tryInRegion $ acs ++ cs'' - res' <- tryBindReg (L2.LetE (vr,[], valTy, L2.AppE f (concatMap locsInTy atys ++ locsInTy valTy) args') bod'', ty'', fcs) + res' <- tryBindReg (L2.LetE (vr,[], valTy, L2.AppE (f, t) (concatMap locsInTy atys ++ locsInTy valTy) args') bod'', ty'', fcs) bindImmediateDependentLocs (concatMap locsInTy atys ++ locsInTy valTy) res' AppE{} -> err$ "Malformed function application: " ++ (show ex0) @@ -879,7 +880,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = let _ret_ty = arrOut $ lookupFEnv f env -- if isScalarTy ret_ty || isPackedTy ret_ty -- then do - (ex0', ty, cs) <- inferExp env (LetE (vr,locs,bty,(AppE f [] args)) bod) dest + (ex0', ty, cs) <- inferExp env (LetE (vr,locs,bty,(AppE (f, NoTail) [] args)) bod) dest -- Assume that all args are VarE's let args2 = map (\e -> case e of (VarE v) -> VarE v @@ -1134,7 +1135,7 @@ inferExp env@FullEnv{dataDefs} ex0 dest = let fn_ty = lookupFEnv fn env retty :: Ty2 retty = outTy fn_ty - e' = TimeIt (AppE fn locs args) (stripTyLocs retty) b + e' = TimeIt (AppE (fn, NoTail) locs args) (stripTyLocs retty) b in inferExp env e' dest @@ -1556,7 +1557,7 @@ unifyAll [] [] successA _ = successA isCpyCallExpr1 :: Exp1 -> Bool -isCpyCallExpr1 (AppE f _ _ ) = isCpyVar f +isCpyCallExpr1 (AppE (f, _) _ _ ) = isCpyVar f isCpyCallExpr1 _ = False isCpyVar :: Var -> Bool @@ -1635,7 +1636,7 @@ copy (e,ty,cs) lv1 = case ty of PackedTy tc lv2 -> do let copyName = mkCopyFunName tc -- assume a copy function with this name - eapp = AppE copyName [lv2,lv1] [e] + eapp = AppE (copyName, NoTail) [lv2,lv1] [e] return (eapp, PackedTy tc lv1, cs) _ -> err $ "Did not expect to need to copy non-packed type: " ++ show ty @@ -1976,7 +1977,7 @@ copyOutOfOrderPacked prg@(Prog ddfs fndefs mnExp) = do case M.lookup v cpy_env2 of Just ls -> do let binds = map (\(old,new) -> let PackedTy tycon _ = L1.lookupVEnv old env2 f = mkCopyFunName tycon - in (new,[],PackedTy tycon (),AppE f [] [VarE old])) + in (new,[],PackedTy tycon (),AppE (f, NoTail) [] [VarE old])) ls binds1 = (v,locs,ty,rhs1) : binds pure $ (cpy_env2, mkLets binds1 bod1) @@ -1996,7 +1997,7 @@ copyOutOfOrderPacked prg@(Prog ddfs fndefs mnExp) = do let binds = map (\(old,new) -> let PackedTy tycon _ = L1.lookupVEnv old env2' f = mkCopyFunName tycon - in (new,[],PackedTy tycon (),AppE f [] [VarE old])) + in (new,[],PackedTy tycon (),AppE (f, NoTail) [] [VarE old])) ls in mkLets binds rhs1) rhs1 vars diff --git a/gibbon-compiler/src/Gibbon/Passes/Lower.hs b/gibbon-compiler/src/Gibbon/Passes/Lower.hs index d60f5cc2b..8a59a4877 100644 --- a/gibbon-compiler/src/Gibbon/Passes/Lower.hs +++ b/gibbon-compiler/src/Gibbon/Passes/Lower.hs @@ -941,27 +941,27 @@ lower Prog{fundefs,ddefs,mainExp} = do (tail free_reg sym_tbl bod) --------------------------------End PrimApps---------------------------------- - AppE v _ ls -> return $ T.TailCall v (map (triv sym_tbl "operand") ls) + AppE (v, _) _ ls -> return $ T.TailCall v (map (triv sym_tbl "operand") ls) SpawnE{} -> error "lower: Unbound SpanwnE" SyncE -> error "lower: Unbound SpanwnE" -- Tail calls are just an optimization, if we have a Proj/App it cannot be tail: - ProjE ix ( (AppE f _ e)) -> dbgTrace 5 "ProjE" $ do + ProjE ix ( (AppE (f, _) _ e)) -> dbgTrace 5 "ProjE" $ do tmp <- gensym $ toVar "prjapp" let (inTs, _) = funTy (fundefs # f) tail free_reg sym_tbl $ LetE ( tmp , [] , fmap (const ()) (inTs !! ix) - , ProjE ix (AppE f [] e)) + , ProjE ix (AppE (f, NoTail) [] e)) (VarE tmp) - LetE (_,_,_, ( (L3.AppE f _ _))) _ + LetE (_,_,_, ( (L3.AppE (f, _) _ _))) _ | M.notMember f fundefs -> error $ "Application of unbound function: "++show f -- Non-tail free_reg call: - LetE (vr, _,t, projOf -> (stk, ( (L3.AppE f _ ls)))) bod -> do + LetE (vr, _,t, projOf -> (stk, ( (L3.AppE (f, _) _ ls)))) bod -> do let (_ , outTy) = funTy (fundefs # f) let f' = cleanFunName f (vsts,bod') <- case outTy of @@ -983,7 +983,7 @@ lower Prog{fundefs,ddefs,mainExp} = do T.LetCallT False vsts f' (L.map (triv sym_tbl "one of app rands") ls) <$> (tail free_reg sym_tbl bod') LetE (v, _,ty, L3.SpawnE fn locs args) bod -> do - T.LetCallT{..} <- tail free_reg sym_tbl (LetE (v,_,ty, AppE fn locs args) bod) + T.LetCallT{..} <- tail free_reg sym_tbl (LetE (v,_,ty, AppE (fn, NoTail) locs args) bod) pure $ T.LetCallT { T.async = True, .. } LetE (_,_,_, SyncE) bod -> do diff --git a/gibbon-compiler/src/Gibbon/Passes/MarkTailCalls.hs b/gibbon-compiler/src/Gibbon/Passes/MarkTailCalls.hs new file mode 100644 index 000000000..c29a4af14 --- /dev/null +++ b/gibbon-compiler/src/Gibbon/Passes/MarkTailCalls.hs @@ -0,0 +1,736 @@ +module Gibbon.Passes.MarkTailCalls (markTailCalls) where + +import Data.Foldable (foldrM) +import qualified Data.List as L +import qualified Data.Map as M +import Data.Maybe (fromJust) +import qualified Data.Set as S +import Prelude as P + +import Gibbon.Common +import Gibbon.DynFlags +import Gibbon.L2.Syntax as Old +import Gibbon.NewL2.Syntax as NewL2 + +-- ^ A map that tracks location variables that need to be mutable. + +type TrackLocVariables = M.Map LocVar (S.Set LocVar, Bool) + +markTailCalls :: NewL2.Prog2 -> PassM NewL2.Prog2 +markTailCalls Prog{ddefs, fundefs, mainExp} = do + fds' <- mapM (markTailCallsFn ddefs) $ M.elems fundefs + let newFundefs = M.fromList $ map (\f -> (funName f, f)) fds' + let newProg = Prog{ddefs = ddefs, fundefs = newFundefs, mainExp = mainExp} + pure $ newProg {- dbgTraceIt (sdoc newProg) dbgTraceIt (sdoc $ M.elems fundefs')-} + +markTailCallsFn :: NewL2.DDefs2 -> NewL2.FunDef2 -> PassM NewL2.FunDef2 +markTailCallsFn ddefs f@FunDef{funName, funArgs, funTy, funMeta, funBody} = do + let (funBody', env) = markTailCallsFnBody funName M.empty funBody + (ArrowTy2 locVars arrIns _arrEffs arrOut _locRets _isPar) = dbgTraceIt "Print env at the end." dbgTraceIt (sdoc (env, M.elems env)) dbgTraceIt "End\n" funTy + locVars' = + P.map + ( \(LRM l r m) -> case (backTrackLocs env l False M.empty) of + (False, _) -> LRM l r m + (True, _) -> LRM l r OutputMutable + ) + locVars + funTy' = (ArrowTy2 locVars' arrIns _arrEffs arrOut _locRets _isPar) + funBody'' = markMutableLocsAfterInitialPass env funBody' + --funBody''' <- copyOutputMutableBeforeCallsAndReplace funBody'' + return $ FunDef funName funArgs funTy' funBody'' funMeta + +-- if tailCallTy == TMC +-- then +-- let (ArrowTy2 locVars arrIns _arrEffs arrOut _locRets _isPar) = funTy +-- locVars' = P.map (\(LRM l r m) -> if m == Output +-- then LRM l r OutputMutable +-- else LRM l r m +-- ) locVars +-- funTy' = (ArrowTy2 locVars' arrIns _arrEffs arrOut _locRets _isPar) +-- in return $ FunDef funName funArgs funTy' funBody' funMeta {-dbgTraceIt (sdoc (tailCallTy, funName, funTy')) dbgTraceIt "a" dbgTraceIt (sdoc (tailCallTy, funName, funTy')) dbgTraceIt "a" -} +-- else if tailCallTy == TC +-- then +-- let (ArrowTy2 locVars arrIns _arrEffs arrOut _locRets _isPar) = funTy +-- funTy' = (ArrowTy2 locVars arrIns _arrEffs arrOut _locRets _isPar) +-- in return $ FunDef funName funArgs funTy' funBody' funMeta {-dbgTraceIt (sdoc (tailCallTy, funName, funTy')) dbgTraceIt "b" dbgTraceIt (sdoc (tailCallTy, funName, funTy')) dbgTraceIt "b" -} +-- else pure f {-dbgTraceIt (sdoc (tailCallTy, funName, funTy)) dbgTraceIt "c" dbgTraceIt (sdoc (tailCallTy, funName, funTy)) dbgTraceIt "c"-} +-- --dbgTraceIt (sdoc tailCallTy) pure f +-- pure f + +backTrackLocs :: TrackLocVariables -> LocVar -> Bool -> M.Map LocVar Bool -> (Bool, M.Map LocVar Bool) +backTrackLocs env v accum visited = case M.lookup v env of + Nothing -> + let visited' = M.insert v True visited + in (accum, visited') + Just (s, mut) -> + let locsToLook = S.toList s + results = + P.map + ( \l -> + let (a', v') = backTrackLocs env l accum visited + in (a', v') + ) + locsToLook + accum' = P.foldr (\b a -> b || a) accum $ P.map fst results + visited' = M.unions $ P.map snd results + visited'' = M.insert v True visited + accum'' = accum' || mut + in (accum'', visited'') + +markTailCallsFnBody :: Var -> TrackLocVariables -> NewL2.Exp2 -> (NewL2.Exp2, TrackLocVariables) +markTailCallsFnBody funName env exp2 = case exp2 of + VarE v -> (VarE v, env) + LitE l -> (LitE l, env) + CharE c -> (CharE c, env) + FloatE f -> (FloatE f, env) + LitSymE v -> (LitSymE v, env) + AppE (v, t) locs args -> + let results = P.map (markTailCallsFnBody funName env) args + args' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (AppE (v, t) locs args', env') + PrimAppE p args -> + let results = P.map (markTailCallsFnBody funName env) args + args' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (PrimAppE p args', env') + LetE (v, loc, ty, rhs) bod -> case rhs of + AppE (v', _) locs' args' -> + if v' == funName + then + let tailCallType = markTailCallsFnBodyHelper 0 bod + env' = case tailCallType of + NoTail -> env + TC -> env + TMC -> + P.foldr + ( \loc e -> case M.lookup (toLocVar loc) e of + Nothing -> case loc of + Loc (LREM l' r' e' m') -> case m' of + Output -> M.insert (toLocVar loc) (S.empty, True) e + OutputMutable -> M.insert (toLocVar loc) (S.empty, True) e + _ -> e + _ -> e + Just (s, m) -> case loc of + Loc (LREM l' r' e' m') -> case m' of + Output -> M.insert (toLocVar loc) (s, True) e + OutputMutable -> M.insert (toLocVar loc) (s, True) e + _ -> e + _ -> e + ) + env + locs' + rhs' = AppE (v', tailCallType) locs' args' + (rhs'', env'') = markTailCallsFnBody funName env' rhs' + (bod', env''') = markTailCallsFnBody funName env'' bod + in (LetE (v, loc, ty, rhs'') bod', env''') + else + let (rhs', env') = markTailCallsFnBody funName env rhs + (bod', env'') = markTailCallsFnBody funName env' bod + in (LetE (v, loc, ty, rhs') bod', env'') + _ -> + let (rhs', env') = markTailCallsFnBody funName env rhs + (bod', env'') = markTailCallsFnBody funName env' bod + in (LetE (v, loc, ty, rhs') bod', env'') + IfE a b c -> + let (a', e1) = markTailCallsFnBody funName env a + (b', e2) = markTailCallsFnBody funName e1 b + (c', e3) = markTailCallsFnBody funName e2 c + in (IfE a' b' c', e3) + MkProdE ls -> + let results = P.map (markTailCallsFnBody funName env) ls + ls' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (MkProdE ls', env') + ProjE i e -> + let (e', env') = markTailCallsFnBody funName env e + in (ProjE i e', env') + -- [(DataCon, [(Var,loc)], EXP)] + CaseE scrt brs -> + let results = + P.map + ( \(a, b, c) -> + let (c', env') = markTailCallsFnBody funName env c + in ((a, b, c'), env') + ) + brs + brs' = P.map fst results + env'' = M.unionsWith unionMapLambda $ P.map snd results + in (CaseE scrt brs', env'') + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + DataConE loc c args -> + let locInDataCon = dbgTraceIt "In DataCon:" dbgTraceIt (sdoc (env, M.elems env)) dbgTraceIt ("End\n") toLocVar loc + in case (backTrackLocs env locInDataCon False M.empty) of + (False, _) -> + let results = P.map (markTailCallsFnBody funName env) args + args' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (DataConE loc c args', env') + (True, _) -> + let loc' = case loc of + NewL2.Loc lrem -> NewL2.Loc lrem{lremMode = OutputMutable} + _ -> loc + results = P.map (markTailCallsFnBody funName env) args + args' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (DataConE loc' c args', env') + TimeIt e d b -> + let (e', env') = markTailCallsFnBody funName env e + in (TimeIt e' d b, env') + MapE d e -> + let (e', env') = markTailCallsFnBody funName env e + in (MapE d e', env') + FoldE i it e -> + let (e', env') = markTailCallsFnBody funName env e + in (FoldE i it e', env') + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + SpawnE v locs exps -> + let results = P.map (markTailCallsFnBody funName env) exps + exps' = P.map fst results + env' = M.unionsWith unionMapLambda $ P.map snd results + in (SpawnE v locs exps', env') + SyncE -> (exp2, env) + WithArenaE _v e -> + let (e', env') = markTailCallsFnBody funName env e + in (WithArenaE _v e', env') + Ext ext -> + case ext of + Old.LetRegionE r a b bod -> + let (bod', env') = markTailCallsFnBody funName env bod + in (Ext $ Old.LetRegionE r a b bod', env') + Old.LetParRegionE r a b bod -> + let (bod', env') = markTailCallsFnBody funName env bod + in (Ext $ Old.LetParRegionE r a b bod', env') + Old.LetLocE loc locexp bod -> + let locInExp = freeLoc locexp + env' = case locInExp of + Nothing -> env + Just l -> M.insert l (S.singleton (toLocVar loc), False) env + (bod', env'') = markTailCallsFnBody funName env' bod + locexp' = case locInExp of + Nothing -> locexp + Just l -> case (backTrackLocs env'' l False M.empty) of + (False, _) -> locexp + (True, _) -> changeLocData locexp l + in (Ext $ Old.LetLocE loc locexp' bod', env'') + _ -> (Ext ext, env) + where + -- Old.StartOfPkdCursor v -> [NoTail] + -- Old.TagCursor a b -> [NoTail] + -- Old.RetE locs v -> [NoTail] + -- Old.FromEndE loc -> [NoTail] + -- Old.BoundsCheck _ reg cur -> [NoTail] + -- Old.IndirectionE _ _ (a,b) (c,d) _ -> [NoTail] + -- Old.AddFixed v _ -> [NoTail] + -- Old.GetCilkWorkerNum -> [NoTail] + -- Old.LetAvail vs bod -> [NoTail] + -- Old.AllocateTagHere loc _ -> [NoTail] + -- Old.AllocateScalarsHere loc -> [NoTail] + -- Old.SSPush _ a b _ -> [NoTail] + -- Old.SSPop _ a b -> [NoTail] + -- Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) + + unionMapLambda = (\(locSet, m) (locSet', m') -> (S.union locSet locSet', m)) + +freeLoc :: PreLocExp LocArg -> Maybe LocVar +freeLoc exp = case exp of + AfterConstantLE c loc -> Just (toLocVar loc) + AfterVariableLE v loc b -> Just (toLocVar loc) + FromEndLE loc -> Just (toLocVar loc) + _ -> Nothing + +changeLocData :: PreLocExp LocArg -> LocVar -> PreLocExp LocArg +changeLocData exp var = case exp of + AfterConstantLE c loc -> case loc of + NewL2.Loc lrem -> AfterConstantLE c (NewL2.Loc lrem{lremMode = OutputMutable}) + _ -> exp + AfterVariableLE v loc b -> case loc of + NewL2.Loc lrem -> AfterVariableLE v (NewL2.Loc lrem{lremMode = OutputMutable}) b + _ -> exp + FromEndLE loc -> case loc of + NewL2.Loc lrem -> FromEndLE $ NewL2.Loc lrem{lremMode = OutputMutable} + _ -> exp + _ -> exp + +-- Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) +-- Old.LetParRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) +-- Old.LetLocE loc locexp bod -> S.delete loc (allFreeVars bod `S.union` gFreeVars locexp) +-- Old.StartOfPkdCursor v -> S.singleton v +-- Old.TagCursor a b-> S.fromList [a,b] +-- Old.RetE locs v -> S.insert v (S.fromList (map toLocVar locs)) +-- Old.FromEndE loc -> S.singleton (toLocVar loc) +-- Old.BoundsCheck _ reg cur -> S.fromList (map toLocVar [reg, cur]) +-- Old.IndirectionE _ _ (a,b) (c,d) _ -> S.fromList $ [toLocVar a, toLocVar b, toLocVar c, toLocVar d] +-- Old.AddFixed v _ -> S.singleton v +-- Old.GetCilkWorkerNum-> S.empty +-- Old.LetAvail vs bod -> S.fromList vs `S.union` gFreeVars bod +-- Old.AllocateTagHere loc _ -> S.singleton loc +-- Old.AllocateScalarsHere loc -> S.singleton loc +-- Old.SSPush _ a b _ -> S.fromList [a,b] +-- Old.SSPop _ a b -> S.fromList [a,b] + +markTailCallsFnBodyHelper :: Int -> NewL2.Exp2 -> TailRecType +markTailCallsFnBodyHelper depth exp2 = case exp2 of + -- VarE v -> False + -- LitE _ -> False + -- CharE{} -> False + -- FloatE{} -> False + -- LitSymE _ -> False + -- AppE v locs args -> False + -- PrimAppE p args -> False + LetE (v, _, _, rhs) bod -> + if True --depth == 0 + then case rhs of + -- TODO + -- Here, check if the data con is the one that's in the return type. + -- Then, also return the output loc that in the datacon, only that loc should be marked as OutputMutable + DataConE loc d args -> markTailCallsFnBodyHelper (depth + 1) bod {-dbgTraceIt ("Here2!") dbgTraceIt (sdoc rhs)-} + -- TODO: figure out a way to get the return type of the function + --let tyConOfDataConE = getTyOfDataCon ddefs d + -- returnTy = outTy ty2 + -- in if tyConOfDataConE == returnTy + -- then markTailCallsFnBodyHelper ddefs bod ty2 (depth+1) + -- else NoTail + _ -> NoTail {- dbgTraceIt (sdoc rhs) dbgTraceIt ("Here!")-} + else NoTail {-dbgTraceIt ("Here3!")-} + -- IfE a b c -> + -- MkProdE ls -> + -- ProjE i e -> + -- CaseE scrt brs -> + -- DataConE loc c args -> + -- TimeIt e _ _ -> + -- MapE _ e -> + -- FoldE _ _ e -> + -- SpawnE v locs _ -> + -- SyncE -> + -- WithArenaE _v e -> + Ext ext -> case ext of + -- Old.LetRegionE r _ _ bod -> + -- Old.LetParRegionE r _ _ bod -> + -- Old.LetLocE loc locexp bod -> + -- Old.StartOfPkdCursor v -> + -- Old.TagCursor a b -> + Old.RetE locs v -> + if depth == 0 + then TC + else + if depth == 1 + then TMC + else NoTail + -- Old.FromEndE loc -> + -- Old.BoundsCheck _ reg cur -> + -- Old.IndirectionE _ _ (a,b) (c,d) _ -> + -- Old.AddFixed v _ -> + -- Old.GetCilkWorkerNum-> + -- Old.LetAvail vs bod -> + -- Old.AllocateTagHere loc _ -> + -- Old.AllocateScalarsHere loc -> + -- Old.SSPush _ a b _ -> + -- Old.SSPop _ a b -> + _ -> NoTail + _ -> NoTail + +markMutableLocsAfterInitialPass :: TrackLocVariables -> NewL2.Exp2 -> NewL2.Exp2 +markMutableLocsAfterInitialPass env exp = + case exp of + VarE v -> exp + LitE l -> exp + CharE c -> exp + FloatE f -> exp + LitSymE v -> exp + AppE (v, t) locs args -> + let args' = P.map (markMutableLocsAfterInitialPass env) args + locs' = + P.map + ( \l -> case l of + Loc (LREM l' r e _) -> case (backTrackLocs env l' False M.empty) of + (False, _) -> l + (True, _) -> Loc (LREM l' r e OutputMutable) + _ -> l + ) + locs + in AppE (v, t) locs' args' + PrimAppE p args -> + let args' = P.map (markMutableLocsAfterInitialPass env) args + in PrimAppE p args' + LetE (v, loc, ty, rhs) bod -> + let rhs' = markMutableLocsAfterInitialPass env rhs + bod' = markMutableLocsAfterInitialPass env bod + in LetE (v, loc, ty, rhs') bod' + IfE a b c -> + let a' = markMutableLocsAfterInitialPass env a + b' = markMutableLocsAfterInitialPass env b + c' = markMutableLocsAfterInitialPass env c + in IfE a' b' c' + MkProdE ls -> + let ls' = P.map (markMutableLocsAfterInitialPass env) ls + in MkProdE ls' + ProjE i e -> + let e' = markMutableLocsAfterInitialPass env e + in ProjE i e' + -- [(DataCon, [(Var,loc)], EXP)] + CaseE scrt brs -> + let brs' = + P.map + ( \(a, b, c) -> + let c' = markMutableLocsAfterInitialPass env c + in (a, b, c') + ) + brs + in CaseE scrt brs' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + DataConE loc c args -> + let locInDataCon = toLocVar loc + in case (backTrackLocs env locInDataCon False M.empty) of + (False, _) -> + let args' = P.map (markMutableLocsAfterInitialPass env) args + in DataConE loc c args' + (True, _) -> + let loc' = case loc of + NewL2.Loc lrem -> NewL2.Loc lrem{lremMode = OutputMutable} + _ -> loc + args' = P.map (markMutableLocsAfterInitialPass env) args + in DataConE loc' c args' + TimeIt e d b -> + let e' = markMutableLocsAfterInitialPass env e + in TimeIt e' d b + MapE d e -> + let e' = markMutableLocsAfterInitialPass env e + in MapE d e' + FoldE i it e -> + let e' = markMutableLocsAfterInitialPass env e + in FoldE i it e' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + SpawnE v locs exps -> + let exps' = P.map (markMutableLocsAfterInitialPass env) exps + in SpawnE v locs exps' + SyncE -> exp + WithArenaE _v e -> + let e' = markMutableLocsAfterInitialPass env e + in WithArenaE _v e' + Ext ext -> + case ext of + Old.LetRegionE r a b bod -> + let bod' = markMutableLocsAfterInitialPass env bod + in Ext $ Old.LetParRegionE r a b bod' + Old.LetParRegionE r a b bod -> + let bod' = markMutableLocsAfterInitialPass env bod + in Ext $ Old.LetParRegionE r a b bod' + Old.LetLocE loc locexp bod -> + let locInExp = freeLoc locexp + bod' = markMutableLocsAfterInitialPass env bod + locexp' = case locInExp of + Nothing -> locexp + Just l -> case (backTrackLocs env l False M.empty) of + (False, _) -> locexp + (True, _) -> changeLocData locexp l + loc' = case (backTrackLocs env (toLocVar loc) False M.empty) of + (False, _) -> loc + (True, _) -> case loc of + Loc lrem -> Loc lrem{lremMode = OutputMutable} + _ -> loc + in Ext $ Old.LetLocE loc' locexp' bod' + Old.BoundsCheck a reg cur -> + let locInCur = toLocVar cur + in case (backTrackLocs env locInCur False M.empty) of + (False, _) -> Ext ext + (True, _) -> + let cur' = case cur of + NewL2.Loc lrem -> NewL2.Loc lrem{lremMode = OutputMutable} + _ -> cur + in Ext $ Old.BoundsCheck a reg cur' + Old.AllocateTagHere loc tycon -> + let loc' = case (backTrackLocs env (toLocVar loc) False M.empty) of + (False, _) -> loc + (True, _) -> case loc of + Loc lrem -> Loc lrem{lremMode = OutputMutable} + _ -> loc + in Ext $ Old.AllocateTagHere loc' tycon + Old.AllocateScalarsHere loc -> + let loc' = case (backTrackLocs env (toLocVar loc) False M.empty) of + (False, _) -> loc + (True, _) -> case loc of + Loc lrem -> Loc lrem{lremMode = OutputMutable} + _ -> loc + in Ext $ Old.AllocateScalarsHere loc' + _ -> Ext ext + +-- Old.StartOfPkdCursor v -> [NoTail] +-- Old.TagCursor a b -> [NoTail] +-- Old.RetE locs v -> [NoTail] +-- Old.FromEndE loc -> [NoTail] +-- Old.BoundsCheck _ reg cur -> [NoTail] +-- Old.IndirectionE _ _ (a,b) (c,d) _ -> [NoTail] +-- Old.AddFixed v _ -> [NoTail] +-- Old.GetCilkWorkerNum -> [NoTail] +-- Old.LetAvail vs bod -> [NoTail] +-- Old.AllocateTagHere loc _ -> [NoTail] +-- Old.AllocateScalarsHere loc -> [NoTail] +-- Old.SSPush _ a b _ -> [NoTail] +-- Old.SSPop _ a b -> [NoTail] +-- Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) + +copyOutputMutableBeforeCallsAndReplace :: NewL2.Exp2 -> PassM NewL2.Exp2 +copyOutputMutableBeforeCallsAndReplace exp = case exp of + VarE v -> return exp + LitE l -> return exp + CharE c -> return exp + FloatE f -> return exp + LitSymE v -> return exp + AppE (v, t) locs args -> do + args' <- mapM copyOutputMutableBeforeCallsAndReplace args + return $ AppE (v, t) locs args' + PrimAppE p args -> do + args' <- mapM copyOutputMutableBeforeCallsAndReplace args + return $ PrimAppE p args' + LetE (v, lca, ty, rhs) bod -> do + case rhs of + AppE (v', t) locs args -> + if True --should a t == TMC or similar check be necessary ? + then do + let outputMutableLocs = + P.concatMap + ( \l -> case l of + Loc (LREM lc _ _ m) -> + if m == OutputMutable + then [l] + else [] + _ -> [] + ) + locs + -- create new LetLoc binds for all mutable locations passed to the TMC call. + (letList :: [E2Ext loc dec], locMap) <- + foldrM + ( \l (lst, map) -> case l of + Loc (LREM ll a b m') -> do + -- use gemsym to get name for a new varible + new_loc <- gensym "loc" + let locexp = AfterConstantLE 0 l + let map' = M.insert ll new_loc map + let new_loc_arg = Loc (LREM new_loc a b m') -- TODO: should this be outputMutable or just Output + return $ (lst ++ [NewL2.LetLocE new_loc_arg locexp (VarE new_loc)], map') + ) + ([], M.empty) + outputMutableLocs + -- fix all downstream locs. + rhs' <- copyOutputMutableBeforeCallsAndReplace rhs + bod' <- replaceLocsHelper locMap bod + bod'' <- copyOutputMutableBeforeCallsAndReplace bod' + let sub_exp = LetE (v, lca, ty, rhs') bod'' + exp' <- + foldrM + ( \expr expr' -> case expr of + NewL2.LetLocE new_loc locexp bd -> return $ Ext $ NewL2.LetLocE new_loc locexp expr' + ) + sub_exp + letList + return $ exp' + else do + rhs' <- copyOutputMutableBeforeCallsAndReplace rhs + bod' <- copyOutputMutableBeforeCallsAndReplace bod + return $ LetE (v, lca, ty, rhs') bod' + _ -> do + rhs' <- copyOutputMutableBeforeCallsAndReplace rhs + bod' <- copyOutputMutableBeforeCallsAndReplace bod + return $ LetE (v, lca, ty, rhs') bod' + IfE a b c -> do + a' <- copyOutputMutableBeforeCallsAndReplace a + b' <- copyOutputMutableBeforeCallsAndReplace b + c' <- copyOutputMutableBeforeCallsAndReplace c + return $ IfE a' b' c' + MkProdE ls -> do + ls' <- mapM copyOutputMutableBeforeCallsAndReplace ls + return $ MkProdE ls' + ProjE i e -> do + e' <- copyOutputMutableBeforeCallsAndReplace e + return $ ProjE i e' + -- [(DataCon, [(Var,loc)], EXP)] + CaseE scrt brs -> do + brs' <- + mapM + ( \(a, b, c) -> do + c' <- copyOutputMutableBeforeCallsAndReplace c + return (a, b, c') + ) + brs + return $ CaseE scrt brs' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + DataConE loc c args -> do + args' <- mapM copyOutputMutableBeforeCallsAndReplace args + return $ DataConE loc c args' + TimeIt e d b -> do + e' <- copyOutputMutableBeforeCallsAndReplace e + return $ TimeIt e' d b + MapE d e -> do + e' <- copyOutputMutableBeforeCallsAndReplace e + return $ MapE d e' + FoldE i it e -> do + e' <- copyOutputMutableBeforeCallsAndReplace e + return $ FoldE i it e' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + SpawnE v locs exps -> do + exps' <- mapM copyOutputMutableBeforeCallsAndReplace exps + return $ SpawnE v locs exps' + SyncE -> return exp + WithArenaE _v e -> do + e' <- copyOutputMutableBeforeCallsAndReplace e + return $ WithArenaE _v e' + Ext ext -> + case ext of + Old.LetRegionE r a b bod -> do + bod' <- copyOutputMutableBeforeCallsAndReplace bod + return $ Ext $ Old.LetParRegionE r a b bod' + Old.LetParRegionE r a b bod -> do + bod' <- copyOutputMutableBeforeCallsAndReplace bod + return $ Ext $ Old.LetParRegionE r a b bod' + Old.LetLocE loc locexp bod -> do + bod' <- copyOutputMutableBeforeCallsAndReplace bod + return $ Ext $ Old.LetLocE loc locexp bod' + _ -> return $ Ext ext + +-- Old.StartOfPkdCursor v -> [NoTail] +-- Old.TagCursor a b -> [NoTail] +-- Old.RetE locs v -> [NoTail] +-- Old.FromEndE loc -> [NoTail] +-- Old.BoundsCheck _ reg cur -> [NoTail] +-- Old.IndirectionE _ _ (a,b) (c,d) _ -> [NoTail] +-- Old.AddFixed v _ -> [NoTail] +-- Old.GetCilkWorkerNum -> [NoTail] +-- Old.LetAvail vs bod -> [NoTail] +-- Old.AllocateTagHere loc _ -> [NoTail] +-- Old.AllocateScalarsHere loc -> [NoTail] +-- Old.SSPush _ a b _ -> [NoTail] +-- Old.SSPop _ a b -> [NoTail] +-- Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) + +replaceLocsHelper :: M.Map LocVar LocVar -> NewL2.Exp2 -> PassM NewL2.Exp2 +replaceLocsHelper map exp = case exp of + VarE v -> return exp + LitE l -> return exp + CharE c -> return exp + FloatE f -> return exp + LitSymE v -> return exp + AppE (v, t) locs args -> do + let locs' = + P.map + ( \l -> case l of + Loc (LREM l' r' e' m') -> case M.lookup l' map of + Nothing -> l + Just l'' -> Loc (LREM l'' r' e' m') + _ -> l + ) + locs + args' <- mapM (replaceLocsHelper map) args + return $ AppE (v, t) locs' args' + PrimAppE p args -> do + args' <- mapM (replaceLocsHelper map) args + return $ PrimAppE p args' + LetE (v, locs, ty, rhs) bod -> do + let locs' = + P.map + ( \l -> case M.lookup (toLocVar l) map of + Nothing -> l + Just l' -> case l of + Loc (LREM _ r e m) -> Loc (LREM l' r e m) + ) + locs + rhs' <- replaceLocsHelper map rhs + bod' <- replaceLocsHelper map bod + return $ LetE (v, locs', ty, rhs') bod' + IfE a b c -> do + a' <- replaceLocsHelper map a + b' <- replaceLocsHelper map b + c' <- replaceLocsHelper map c + return $ IfE a' b' c' + MkProdE ls -> do + ls' <- mapM (replaceLocsHelper map) ls + return $ MkProdE ls' + ProjE i e -> do + e' <- replaceLocsHelper map e + return $ ProjE i e' + -- [(DataCon, [(Var,loc)], EXP)] + CaseE scrt brs -> do + brs' <- + mapM + ( \(a, b, c) -> do + let b' = + P.map + ( \(v, loc) -> case M.lookup (toLocVar loc) map of + Nothing -> (v, loc) + Just l -> case loc of + Loc (LREM _ r e m) -> (v, Loc (LREM l r e m)) + ) + b + c' <- replaceLocsHelper map c + return (a, b', c') + ) + brs + return $ CaseE scrt brs' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + DataConE loc c args -> do + let loc' = case M.lookup (toLocVar loc) map of + Nothing -> loc + Just l -> case loc of + Loc (LREM _ r e m) -> Loc (LREM l r e m) + args' <- mapM (replaceLocsHelper map) args + return $ DataConE loc' c args' + TimeIt e d b -> do + e' <- replaceLocsHelper map e + return $ TimeIt e' d b + MapE d e -> do + e' <- replaceLocsHelper map e + return $ MapE d e' + FoldE i it e -> do + e' <- replaceLocsHelper map e + return $ FoldE i it e' + -- TODO: Check map for any mutable output locations, if they are in the data con then mark them outputMutable + SpawnE v locs exps -> do + exps' <- mapM (replaceLocsHelper map) exps + return $ SpawnE v locs exps' + SyncE -> return exp + WithArenaE _v e -> do + e' <- replaceLocsHelper map e + return $ WithArenaE _v e' + Ext ext -> + case ext of + Old.LetRegionE r a b bod -> do + bod' <- replaceLocsHelper map bod + return $ Ext $ Old.LetParRegionE r a b bod' + Old.LetParRegionE r a b bod -> do + bod' <- replaceLocsHelper map bod + return $ Ext $ Old.LetParRegionE r a b bod' + Old.LetLocE loc locexp bod -> do + let locexp' = case locexp of + StartOfRegionLE r -> locexp + AfterConstantLE i loc -> case M.lookup (toLocVar loc) map of + Nothing -> locexp + Just l -> case loc of + Loc (LREM a b c d) -> AfterConstantLE i (Loc (LREM l b c d)) + AfterVariableLE v loc b -> case M.lookup (toLocVar loc) map of + Nothing -> locexp + Just l -> case loc of + Loc (LREM _ r e m) -> AfterVariableLE v (Loc (LREM l r e m)) b + InRegionLE r -> locexp + FreeLE -> locexp + FromEndLE loc -> case M.lookup (toLocVar loc) map of + Nothing -> locexp + Just l -> case loc of + Loc (LREM _ r e m) -> FromEndLE (Loc (LREM l r e m)) + bod' <- replaceLocsHelper map bod + return $ Ext $ Old.LetLocE loc locexp' bod' + _ -> return $ Ext ext + +-- Old.StartOfPkdCursor v -> [NoTail] +-- Old.TagCursor a b -> [NoTail] +-- Old.RetE locs v -> [NoTail] +-- Old.FromEndE loc -> [NoTail] +-- Old.BoundsCheck _ reg cur -> [NoTail] +-- Old.IndirectionE _ _ (a,b) (c,d) _ -> [NoTail] +-- Old.AddFixed v _ -> [NoTail] +-- Old.GetCilkWorkerNum -> [NoTail] +-- Old.LetAvail vs bod -> [NoTail] +-- Old.AllocateTagHere loc _ -> [NoTail] +-- Old.AllocateScalarsHere loc -> [NoTail] +-- Old.SSPush _ a b _ -> [NoTail] +-- Old.SSPop _ a b -> [NoTail] +-- Old.LetRegionE r _ _ bod -> S.delete (Old.regionToVar r) (allFreeVars bod) diff --git a/gibbon-compiler/src/Gibbon/Passes/ParAlloc.hs b/gibbon-compiler/src/Gibbon/Passes/ParAlloc.hs index 77e4d873e..cf16d62da 100644 --- a/gibbon-compiler/src/Gibbon/Passes/ParAlloc.hs +++ b/gibbon-compiler/src/Gibbon/Passes/ParAlloc.hs @@ -127,7 +127,7 @@ parAllocExp ddefs fundefs env2 reg_env after_env mb_parent_id pending_binds spaw _ -> acc2) Nothing (M.elems (vEnv env2)) indr_dcon = head $ filter isIndirectionTag $ getConOrdering ddefs tycon - rhs = Ext $ IndirectionE tycon indr_dcon (from, reg_env # from) (to, reg_env # to) (AppE "nocopy" [] []) + rhs = Ext $ IndirectionE tycon indr_dcon (from, reg_env # from) (to, reg_env # to) (AppE ("nocopy", NoTail) [] []) pure $ LetE (indr, [], PackedTy tycon from, rhs) acc) bod1 (M.toList after_env) let bod3 = foldl diff --git a/gibbon-compiler/src/Gibbon/Passes/RegionsInwards.hs b/gibbon-compiler/src/Gibbon/Passes/RegionsInwards.hs index 03c3680ce..16a584792 100644 --- a/gibbon-compiler/src/Gibbon/Passes/RegionsInwards.hs +++ b/gibbon-compiler/src/Gibbon/Passes/RegionsInwards.hs @@ -317,7 +317,7 @@ freeVars ex = case ex of LitE _ -> S.empty LitSymE _ -> S.empty VarE v -> S.singleton v - AppE v locvarList ls -> S.unions (L.map freeVars ls) `S.union` S.singleton v `S.union` S.fromList locvarList + AppE (v, _) locvarList ls -> S.unions (L.map freeVars ls) `S.union` S.singleton v `S.union` S.fromList locvarList PrimAppE _ ls -> S.unions (L.map freeVars ls) MkProdE ls -> S.unions (L.map freeVars ls) DataConE locVar _ ls -> S.singleton locVar `S.union` S.unions (L.map freeVars ls) diff --git a/gibbon-compiler/src/Gibbon/Passes/RemoveCopies.hs b/gibbon-compiler/src/Gibbon/Passes/RemoveCopies.hs index ca1237e37..0409703cd 100644 --- a/gibbon-compiler/src/Gibbon/Passes/RemoveCopies.hs +++ b/gibbon-compiler/src/Gibbon/Passes/RemoveCopies.hs @@ -47,7 +47,7 @@ removeCopiesExp ddefs fundefs lenv env2 ex = case ex of -- This AppE copies data from 'lin' to 'lout'. When this becomes an -- indirection node, 'lout' is the _pointer_, and 'lin' the _pointee_. - AppE f [lin,lout] [arg] | isCopyFunName f -> do + AppE (f, _) [lin,lout] [arg] | isCopyFunName f -> do indirection <- gensym "indirection" let (PackedTy tycon _) = gRecoverType ddefs env2 ex -- the indirection datacon for this type @@ -61,7 +61,7 @@ removeCopiesExp ddefs fundefs lenv env2 ex = (VarE indirection) oth -> error $ "removeCopies: Multiple indirection constructors: " ++ sdoc oth - LetE (v,locs,ty@(PackedTy tycon _), (AppE f [lin,lout] [arg])) bod | isCopyFunName f -> do + LetE (v,locs,ty@(PackedTy tycon _), (AppE (f, _) [lin,lout] [arg])) bod | isCopyFunName f -> do -- Get the indirection datacon for this type let indrDcon = filter isIndirectionTag $ getConOrdering ddefs tycon case indrDcon of diff --git a/gibbon-compiler/src/Gibbon/Passes/RouteEnds.hs b/gibbon-compiler/src/Gibbon/Passes/RouteEnds.hs index e1186056c..94457d4e6 100644 --- a/gibbon-compiler/src/Gibbon/Passes/RouteEnds.hs +++ b/gibbon-compiler/src/Gibbon/Passes/RouteEnds.hs @@ -289,14 +289,14 @@ routeEnds prg@Prog{ddefs,fundefs,mainExp} = do -- This is the most interesting case: a let bound function application. -- We need to update the let binding's extra location binding list with -- the end witnesses returned from the function. - LetE (v,_ls,ty,(AppE f lsin e1)) e2 -> do + LetE (v,_ls,ty,(AppE (f, t) lsin e1)) e2 -> do let lenv' = case ty of PackedTy _n l -> M.insert v l lenv _ -> lenv (outlocs,newls,eor') <- doBoundApp f lsin e2' <- exp fns retlocs eor' lenv' afterenv (extendVEnv v ty env2) e2 - return $ LetE (v,outlocs,ty, AppE f lsin e1) + return $ LetE (v,outlocs,ty, AppE (f, t) lsin e1) (wrapBody e2' newls) -- Exactly like AppE. diff --git a/gibbon-compiler/src/Gibbon/Passes/Simplifier.hs b/gibbon-compiler/src/Gibbon/Passes/Simplifier.hs index e32cef7b4..9849f4bf5 100644 --- a/gibbon-compiler/src/Gibbon/Passes/Simplifier.hs +++ b/gibbon-compiler/src/Gibbon/Passes/Simplifier.hs @@ -44,7 +44,7 @@ inlineFuns (Prog ddefs fundefs main) = do go :: PreExpF E1Ext () (UrTy ()) Exp1 -> PassM Exp1 go ex = case ex of - AppEF f [] args -> do + AppEF (f, t) [] args -> do let fn = fundefs M.! f if funInline (funMeta fn) == Inline && funRec (funMeta fn) == NotRec then do @@ -54,7 +54,7 @@ inlineFuns (Prog ddefs fundefs main) = do pure $ mkLets binds funBody else do args' <- mapM (go . project) args - pure $ AppE f [] args' + pure $ AppE (f, t) [] args' _ -> pure $ embed ex deadFunElim :: Prog1 -> PassM Prog1 diff --git a/gibbon-compiler/src/Gibbon/Passes/ThreadRegions.hs b/gibbon-compiler/src/Gibbon/Passes/ThreadRegions.hs index 68973a1f0..e02e7f7b2 100644 --- a/gibbon-compiler/src/Gibbon/Passes/ThreadRegions.hs +++ b/gibbon-compiler/src/Gibbon/Passes/ThreadRegions.hs @@ -104,7 +104,7 @@ threadRegionsFn ddefs fundefs f@FunDef{funName,funArgs,funTy,funMeta,funBody} = rlocs_env = foldr fn M.empty (arrIns funTy) wlocs_env = fn (arrOut funTy) M.empty fnlocargs = map fromLRM (locVars funTy) - region_locs = M.fromList $ map (\(LRM l r _m) -> (regionToVar r, [l])) (locVars funTy) + region_locs = M.fromList $ map (\(LRM l r _) -> (regionToVar r, [l])) (locVars funTy) bod' <- threadRegionsExp ddefs fundefs fnlocargs initRegEnv env2 M.empty rlocs_env wlocs_env M.empty region_locs M.empty S.empty S.empty funBody -- Boundschecking dflags <- getDynFlags @@ -193,7 +193,7 @@ threadRegionsExp ddefs fundefs fnLocArgs renv env2 lfenv rlocs_env wlocs_env pkd let newapplocs = in_regs ++ applocs return $ AppE f newapplocs args - LetE (v,locs,ty, (AppE f applocs args)) bod -> do + LetE (v,locs,ty, (AppE (f, t) applocs args)) bod -> do let argtylocs = concatMap (\arg -> let argty = gRecoverType ddefs env2 arg in @@ -322,13 +322,13 @@ threadRegionsExp ddefs fundefs fnLocArgs renv env2 lfenv rlocs_env wlocs_env pkd (rpush,wpush,rpop,wpop) <- ss_ops free_rlocs' free_wlocs rlocs_env wlocs_env renv emit_ss <- emit_ss_instrs if emit_ss && funCanTriggerGC (funMeta (fundefs # f)) - then do let binds = rpush ++ wpush ++ [(v, newretlocs, ty, AppE f newapplocs args)] ++ wpop ++ rpop + then do let binds = rpush ++ wpush ++ [(v, newretlocs, ty, AppE (f, t) newapplocs args)] ++ wpop ++ rpop (pure $ mkLets binds bod3) - else pure $ mkLets [(v, newretlocs, ty, AppE f newapplocs args)] bod3 + else pure $ mkLets [(v, newretlocs, ty, AppE (f, t) newapplocs args)] bod3 LetE (v,locs,ty, (SpawnE f applocs args)) bod -> do - let e' = LetE (v,locs,ty, (AppE f applocs args)) bod + let e' = LetE (v,locs,ty, (AppE (f, NoTail) applocs args)) bod e'' <- threadRegionsExp ddefs fundefs fnLocArgs renv env2 lfenv rlocs_env wlocs_env pkd_env region_locs ran_env indirs redirs e' pure $ changeAppToSpawn f args e'' @@ -416,8 +416,8 @@ threadRegionsExp ddefs fundefs fnLocArgs renv env2 lfenv rlocs_env wlocs_env pkd LetE (v,locs,ty,rhs@(Ext (AllocateTagHere x x_tycon))) bod -> do let -- x_tycon = (wlocs_env # x) - rlocs_env' = M.insert x x_tycon rlocs_env - wlocs_env' = M.delete x wlocs_env + rlocs_env' = M.insert (NewL2.toLocVar x) x_tycon rlocs_env + wlocs_env' = M.delete (NewL2.toLocVar x) wlocs_env (LetE (v,locs,ty,rhs)) <$> threadRegionsExp ddefs fundefs fnLocArgs renv (extendVEnv v ty env2) lfenv rlocs_env' wlocs_env' pkd_env region_locs ran_env indirs redirs bod @@ -442,14 +442,14 @@ threadRegionsExp ddefs fundefs fnLocArgs renv env2 lfenv rlocs_env wlocs_env pkd AfterConstantLE _ lc -> renv # (toLocVar lc) AfterVariableLE _ lc _ -> renv # (toLocVar lc) FromEndLE lc -> renv # (toLocVar lc) - wlocs_env' = M.insert loc hole_tycon wlocs_env + wlocs_env' = M.insert (toLocVar loc) hole_tycon wlocs_env region_locs1 = case rhs of - AfterConstantLE{} -> M.adjust (\locs -> locs ++ [loc]) reg region_locs - AfterVariableLE{} -> M.adjust (\locs -> locs ++ [loc]) reg region_locs - StartOfRegionLE{} -> M.insert reg [loc] region_locs + AfterConstantLE{} -> M.adjust (\locs -> locs ++ [(toLocVar loc)]) reg region_locs + AfterVariableLE{} -> M.adjust (\locs -> locs ++ [(toLocVar loc)]) reg region_locs + StartOfRegionLE{} -> M.insert reg [(toLocVar loc)] region_locs _ -> region_locs Ext <$> LetLocE loc rhs <$> - threadRegionsExp ddefs fundefs fnLocArgs (M.insert loc reg renv) env2 lfenv rlocs_env wlocs_env' pkd_env region_locs1 ran_env indirs redirs bod + threadRegionsExp ddefs fundefs fnLocArgs (M.insert (toLocVar loc) reg renv) env2 lfenv rlocs_env wlocs_env' pkd_env region_locs1 ran_env indirs redirs bod RetE locs v -> do let ty = lookupVEnv v env2 @@ -723,7 +723,7 @@ allFreeVars_sans_datacon_args ex = case ext of LetRegionE r _sz _ty bod -> S.delete (regionToVar r) (allFreeVars_sans_datacon_args bod) LetParRegionE r _sz _ty bod -> S.delete (regionToVar r) (allFreeVars_sans_datacon_args bod) - LetLocE loc locexp bod -> S.delete loc (allFreeVars_sans_datacon_args bod `S.union` gFreeVars locexp) + LetLocE loc locexp bod -> S.delete (toLocVar loc) (allFreeVars_sans_datacon_args bod `S.union` gFreeVars locexp) StartOfPkdCursor cur -> S.singleton cur TagCursor a b-> S.fromList [a,b] RetE locs v -> S.insert v (S.fromList (map toLocVar locs)) @@ -733,8 +733,8 @@ allFreeVars_sans_datacon_args ex = AddFixed v _ -> S.singleton v GetCilkWorkerNum-> S.empty LetAvail vs bod -> S.fromList vs `S.union` gFreeVars bod - AllocateTagHere loc _ -> S.singleton loc - AllocateScalarsHere loc -> S.singleton loc + AllocateTagHere loc _ -> S.singleton (toLocVar loc) + AllocateScalarsHere loc -> S.singleton (toLocVar loc) SSPush _ a b _ -> S.fromList [a,b] SSPop _ a b -> S.fromList [a,b] _ -> gFreeVars ex diff --git a/gibbon-compiler/src/Gibbon/Pretty.hs b/gibbon-compiler/src/Gibbon/Pretty.hs index 44defae28..dfab0ebd1 100644 --- a/gibbon-compiler/src/Gibbon/Pretty.hs +++ b/gibbon-compiler/src/Gibbon/Pretty.hs @@ -300,6 +300,7 @@ instance (Pretty l) => Pretty (UrTy l) where ListTy el_ty1 -> text "List" <+> pprintWithStyle sty el_ty1 PtrTy -> text "Ptr" CursorTy -> text "Cursor" + MutableCursorTy -> text "MutCursor" ArenaTy -> case sty of PPHaskell -> text "()" PPInternal -> text "Arena" @@ -342,8 +343,9 @@ instance HasPrettyToo e l d => Pretty (PreExp e l d) where CharE i -> quotes (char i) FloatE i -> double i LitSymE v -> text "\"" <> pprintWithStyle sty v <> text "\"" - AppE v locs ls -> parens $ + AppE (v, t) locs ls -> parens $ pprintWithStyle sty v <+> + pprintWithStyle sty t <+> (brackets $ hcat (punctuate "," (map pprint locs))) <+> (pprintWithStyle sty ls) PrimAppE pr es -> @@ -494,7 +496,14 @@ instance Pretty L2.LRM where instance Pretty NewL2.LREM where pprintWithStyle sty (NewL2.LREM loc reg end_reg mode) = - parens $ text "LRM" <+> pprintWithStyle sty loc <+> pprintWithStyle sty reg <+> pprintWithStyle sty end_reg <+> pprintWithStyle sty mode + parens $ text "LREM" <+> pprintWithStyle sty loc <+> pprintWithStyle sty reg <+> pprintWithStyle sty end_reg <+> pprintWithStyle sty mode + + +instance Pretty TailRecType where + pprintWithStyle sty TMC = parens $ text "TMC" + pprintWithStyle sty TC = parens $ text "TC" + pprintWithStyle sty NoTail = parens $ text "NoTail" + instance Pretty NewL2.LocArg where pprintWithStyle sty locarg = @@ -665,7 +674,7 @@ pprintHsWithEnv p@Prog{ddefs,fundefs,mainExp} = CharE i -> char i FloatE i -> double i LitSymE v -> text "\"" <> pprintWithStyle sty v <> text "\"" - AppE v _locs ls -> pprintWithStyle sty v <+> + AppE (v, t) _locs ls -> pprintWithStyle sty v <+> pprintWithStyle sty t <+> (hsep $ map (ppExp monadic env2) ls) PrimAppE pr es -> case pr of diff --git a/gibbon-compiler/src/Gibbon/SExpFrontend.hs b/gibbon-compiler/src/Gibbon/SExpFrontend.hs index e9c42cdd1..5a348f98e 100644 --- a/gibbon-compiler/src/Gibbon/SExpFrontend.hs +++ b/gibbon-compiler/src/Gibbon/SExpFrontend.hs @@ -122,13 +122,15 @@ tagDataCons ddefs = go allCons go cons ex = case ex of -- [2019.02.01] CSK: Do we need this special case ? - AppE v _ ls + AppE (v, _) _ ls | S.member v cons -> do ty <- newMetaTy DataConE ty (fromVar v) <$> (mapM (go cons) ls) - AppE v l ls | S.member v cons -> do ty <- newMetaTy - DataConE ty (fromVar v) <$> mapM (go cons) ls - | otherwise -> AppE v l <$> mapM (go cons) ls + AppE (v, t) l ls + | S.member v cons -> do + ty <- newMetaTy + DataConE ty (fromVar v) <$> mapM (go cons) ls + | otherwise -> AppE (v, t) l <$> mapM (go cons) ls SpawnE v _ ls | S.member v cons -> do @@ -479,8 +481,8 @@ exp se = Ls2 l1 "spawn" app -> do appe <- exp app case appe of - Ext (L _loc (AppE f locs args)) -> pure $ Ext $ L (toLoc l1) (SpawnE f locs args) - (AppE f locs args) -> pure $ Ext $ L (toLoc l1) $ SpawnE f locs args + Ext (L _loc (AppE (f, t) locs args)) -> pure $ Ext $ L (toLoc l1) (SpawnE f locs args) + (AppE (f, t) locs args) -> pure $ Ext $ L (toLoc l1) $ SpawnE f locs args _ -> error $ "Only function calls can be spawn'd. Got: " ++ show app Ls (A l1 "sync":[]) -> do @@ -619,7 +621,7 @@ exp se = ---------------------------------------- -- If NOTHING else matches, we are an application. Be careful we didn't miss anything: Ls (A l rator : rands) -> - let app = AppE (textToVar rator) [] + let app = AppE (textToVar rator, NoTail) [] in Ext <$> L (toLoc l) <$> app <$> mapM exp rands _ -> error $ "Expression form not handled (yet):\n "++ diff --git a/microbench/tail_recursion/ConsListLength.c b/microbench/tail_recursion/ConsListLength.c new file mode 100644 index 000000000..33fe87c54 --- /dev/null +++ b/microbench/tail_recursion/ConsListLength.c @@ -0,0 +1,720 @@ +/* Gibbon program. */ + +#include "gibbon_rts.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN64 +#include +#endif + +#ifdef _GIBBON_POINTER +#include +#endif + +#ifdef _GIBBON_PARALLEL +#include +#include +#endif + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Program starts here + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +typedef struct GibIntProd_struct { + GibInt field0; + } GibIntProd; +typedef struct GibIntGibCursorProd_struct { + GibInt field0; + GibCursor field1; + } GibIntGibCursorProd; +typedef struct GibBoolProd_struct { + GibBool field0; + } GibBoolProd; +typedef struct GibPackedTagGibCursorProd_struct { + GibPackedTag field0; + GibCursor field1; + } GibPackedTagGibCursorProd; +typedef struct GibCursorProd_struct { + GibCursor field0; + } GibCursorProd; +typedef struct GibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + } GibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibIntProd_struct { + GibCursor field0; + GibCursor field1; + GibInt field2; + } GibCursorGibCursorGibIntProd; +typedef struct GibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + } GibCursorGibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + GibCursor field3; + GibCursor field4; + } GibCursorGibCursorGibCursorGibCursorGibCursorProd; +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_215, + GibCursor loc_214, + GibInt len_16_67_104); +GibCursorGibCursorGibIntProd length(GibCursor end_r_217, + GibCursor lst_18_69_108, + GibInt accum_19_70_109); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_ConsIntList(GibCursor end_r_220, GibCursor end_r_221, GibCursor loc_219, + GibCursor arg_38_73_113); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_without_ptrs_ConsIntList(GibCursor end_r_224, GibCursor end_r_225, + GibCursor loc_223, GibCursor arg_43_78_118); +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_227, + GibCursor arg_48_83_123); +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_229, + GibCursor arg_53_87_127); +typedef enum { + GibInt_T, + GibFloat_T, + GibSym_T, + GibBool_T, + GibVector_T, + GibList_T, + GibCursor_T, + ConsIntList_T, + } GibDatatype; +void info_table_initialize(void) +{ + int error = gib_info_table_initialize(8); + + if (error < 0) { + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + exit(1); + } + + GibDatatype field_tys[2]; + + field_tys[0] = ConsIntList_T; + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 0, 8, 0, 1, 1, + field_tys, 1); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 0); + exit(1); + } + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 1, 0, 0, 0, 0, + field_tys, 0); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 1); + exit(1); + } + gib_info_table_finalize(); +} +void symbol_table_initialize(void) +{ + gib_add_symbol(608, ")"); + gib_add_symbol(609, "(Nil"); + gib_add_symbol(610, "(Cons"); + gib_add_symbol(611, " ->r "); + gib_add_symbol(612, " ->i "); + gib_add_symbol(613, " "); +} +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_215, + GibCursor loc_214, + GibInt len_16_67_104) +{ + if (loc_214 + 18 > end_r_215) { + gib_grow_region(&loc_214, &end_r_215); + } + + GibBool fltIf_98_105 = len_16_67_104 <= 0; + + if (fltIf_98_105) { + *(GibPackedTag *) loc_214 = 1; + + GibCursor writetag_404 = loc_214 + 1; + GibCursor after_tag_405 = loc_214 + 1; + + return (GibCursorGibCursorGibCursorProd) {end_r_215, loc_214, + after_tag_405}; + } else { + GibInt fltAppE_99_106 = len_16_67_104 - 1; + GibCursor loc_239 = loc_214 + 9; + + *(GibPackedTag *) loc_214 = 0; + + GibCursor writetag_413 = loc_214 + 1; + GibCursor after_tag_414 = loc_214 + 1; + + *(GibInt *) after_tag_414 = len_16_67_104; + + GibCursor writecur_418 = after_tag_414 + sizeof(GibInt); + GibCursorGibCursorGibCursorProd tmp_struct_0 = + mkConsIntList(end_r_215, loc_239, fltAppE_99_106); + GibCursor pvrtmp_629 = tmp_struct_0.field0; + GibCursor pvrtmp_630 = tmp_struct_0.field1; + GibCursor pvrtmp_631 = tmp_struct_0.field2; + + return (GibCursorGibCursorGibCursorProd) {pvrtmp_629, loc_214, + pvrtmp_631}; + } +} +GibCursorGibCursorGibIntProd length(GibCursor end_r_217, + GibCursor lst_18_69_108, + GibInt accum_19_70_109) +{ + GibPackedTag tmpval_640 = *(GibPackedTag *) lst_18_69_108; + GibCursor tmpcur_641 = lst_18_69_108 + 1; + + + switch_659: + ; + switch (tmpval_640) { + + case 1: + { + GibCursor jump_296 = lst_18_69_108 + 1; + + return (GibCursorGibCursorGibIntProd) {end_r_217, jump_296, + accum_19_70_109}; + break; + } + + case 0: + { + GibInt tmpval_642 = *(GibInt *) tmpcur_641; + GibCursor tmpcur_643 = tmpcur_641 + sizeof(GibInt); + GibInt fltAppE_100_112 = accum_19_70_109 + 1; + GibCursorGibCursorGibIntProd tmp_struct_4 = + length(end_r_217, tmpcur_643, fltAppE_100_112); + GibCursor pvrtmp_644 = tmp_struct_4.field0; + GibCursor pvrtmp_645 = tmp_struct_4.field1; + GibInt pvrtmp_646 = tmp_struct_4.field2; + + return (GibCursorGibCursorGibIntProd) {pvrtmp_644, pvrtmp_645, + pvrtmp_646}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_6 = *(uintptr_t *) tmpcur_641; + GibCursor tmpcur_647 = GIB_UNTAG(tagged_tmpcur_6); + GibCursor tmpaftercur_648 = tmpcur_641 + 8; + uint16_t tmptag_649 = GIB_GET_TAG(tagged_tmpcur_6); + GibCursor end_from_tagged_indr_323 = tmpcur_647 + tmptag_649; + GibCursor jump_325 = tmpcur_641 + 8; + GibCursorGibCursorGibIntProd tmp_struct_5 = + length(end_from_tagged_indr_323, tmpcur_647, accum_19_70_109); + GibCursor pvrtmp_650 = tmp_struct_5.field0; + GibCursor pvrtmp_651 = tmp_struct_5.field1; + GibInt pvrtmp_652 = tmp_struct_5.field2; + + return (GibCursorGibCursorGibIntProd) {end_r_217, jump_325, + pvrtmp_652}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_8 = *(uintptr_t *) tmpcur_641; + GibCursor tmpcur_653 = GIB_UNTAG(tagged_tmpcur_8); + GibCursor tmpaftercur_654 = tmpcur_641 + 8; + uint16_t tmptag_655 = GIB_GET_TAG(tagged_tmpcur_8); + GibCursor end_from_tagged_indr_323 = tmpcur_653 + tmptag_655; + GibCursorGibCursorGibIntProd tmp_struct_7 = + length(end_from_tagged_indr_323, tmpcur_653, accum_19_70_109); + GibCursor pvrtmp_656 = tmp_struct_7.field0; + GibCursor pvrtmp_657 = tmp_struct_7.field1; + GibInt pvrtmp_658 = tmp_struct_7.field2; + + return (GibCursorGibCursorGibIntProd) {pvrtmp_656, pvrtmp_657, + pvrtmp_658}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_640"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_ConsIntList(GibCursor end_r_220, + GibCursor end_r_221, + GibCursor loc_219, + GibCursor arg_38_73_113) +{ + if (loc_219 + 18 > end_r_221) { + gib_grow_region(&loc_219, &end_r_221); + } + + GibPackedTag tmpval_660 = *(GibPackedTag *) arg_38_73_113; + GibCursor tmpcur_661 = arg_38_73_113 + 1; + + + switch_709: + ; + switch (tmpval_660) { + + case 0: + { + GibInt tmpval_662 = *(GibInt *) tmpcur_661; + GibCursor tmpcur_663 = tmpcur_661 + sizeof(GibInt); + GibCursor loc_257 = loc_219 + 9; + + *(GibPackedTag *) loc_219 = 0; + + GibCursor writetag_440 = loc_219 + 1; + GibCursor after_tag_441 = loc_219 + 1; + + *(GibInt *) after_tag_441 = tmpval_662; + + GibCursor writecur_445 = after_tag_441 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_9 = + _copy_ConsIntList(end_r_220, end_r_221, loc_257, tmpcur_663); + GibCursor pvrtmp_664 = tmp_struct_9.field0; + GibCursor pvrtmp_665 = tmp_struct_9.field1; + GibCursor pvrtmp_666 = tmp_struct_9.field2; + GibCursor pvrtmp_667 = tmp_struct_9.field3; + GibCursor pvrtmp_668 = tmp_struct_9.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_664, + pvrtmp_665, + pvrtmp_666, + loc_219, + pvrtmp_668}; + break; + } + + case 1: + { + GibCursor jump_303 = arg_38_73_113 + 1; + + *(GibPackedTag *) loc_219 = 1; + + GibCursor writetag_450 = loc_219 + 1; + GibCursor after_tag_451 = loc_219 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_220, + end_r_221, + jump_303, + loc_219, + after_tag_451}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_11 = *(uintptr_t *) tmpcur_661; + GibCursor tmpcur_681 = GIB_UNTAG(tagged_tmpcur_11); + GibCursor tmpaftercur_682 = tmpcur_661 + 8; + uint16_t tmptag_683 = GIB_GET_TAG(tagged_tmpcur_11); + GibCursor end_from_tagged_indr_329 = tmpcur_681 + tmptag_683; + GibCursor jump_331 = tmpcur_661 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_10 = + _copy_ConsIntList(end_from_tagged_indr_329, end_r_221, loc_219, tmpcur_681); + GibCursor pvrtmp_684 = tmp_struct_10.field0; + GibCursor pvrtmp_685 = tmp_struct_10.field1; + GibCursor pvrtmp_686 = tmp_struct_10.field2; + GibCursor pvrtmp_687 = tmp_struct_10.field3; + GibCursor pvrtmp_688 = tmp_struct_10.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_220, + pvrtmp_685, + jump_331, + pvrtmp_687, + pvrtmp_688}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_13 = *(uintptr_t *) tmpcur_661; + GibCursor tmpcur_695 = GIB_UNTAG(tagged_tmpcur_13); + GibCursor tmpaftercur_696 = tmpcur_661 + 8; + uint16_t tmptag_697 = GIB_GET_TAG(tagged_tmpcur_13); + GibCursor end_from_tagged_indr_329 = tmpcur_695 + tmptag_697; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_12 = + _copy_ConsIntList(end_from_tagged_indr_329, end_r_221, loc_219, tmpcur_695); + GibCursor pvrtmp_698 = tmp_struct_12.field0; + GibCursor pvrtmp_699 = tmp_struct_12.field1; + GibCursor pvrtmp_700 = tmp_struct_12.field2; + GibCursor pvrtmp_701 = tmp_struct_12.field3; + GibCursor pvrtmp_702 = tmp_struct_12.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_698, + pvrtmp_699, + pvrtmp_700, + pvrtmp_701, + pvrtmp_702}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_660"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_without_ptrs_ConsIntList(GibCursor end_r_224, + GibCursor end_r_225, + GibCursor loc_223, + GibCursor arg_43_78_118) +{ + GibPackedTag tmpval_710 = *(GibPackedTag *) arg_43_78_118; + GibCursor tmpcur_711 = arg_43_78_118 + 1; + + + switch_759: + ; + switch (tmpval_710) { + + case 0: + { + GibInt tmpval_712 = *(GibInt *) tmpcur_711; + GibCursor tmpcur_713 = tmpcur_711 + sizeof(GibInt); + GibCursor loc_270 = loc_223 + 9; + + *(GibPackedTag *) loc_223 = 0; + + GibCursor writetag_472 = loc_223 + 1; + GibCursor after_tag_473 = loc_223 + 1; + + *(GibInt *) after_tag_473 = tmpval_712; + + GibCursor writecur_477 = after_tag_473 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_17 = + _copy_without_ptrs_ConsIntList(end_r_224, end_r_225, loc_270, tmpcur_713); + GibCursor pvrtmp_714 = tmp_struct_17.field0; + GibCursor pvrtmp_715 = tmp_struct_17.field1; + GibCursor pvrtmp_716 = tmp_struct_17.field2; + GibCursor pvrtmp_717 = tmp_struct_17.field3; + GibCursor pvrtmp_718 = tmp_struct_17.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_714, + pvrtmp_715, + pvrtmp_716, + loc_223, + pvrtmp_718}; + break; + } + + case 1: + { + GibCursor jump_308 = arg_43_78_118 + 1; + + *(GibPackedTag *) loc_223 = 1; + + GibCursor writetag_482 = loc_223 + 1; + GibCursor after_tag_483 = loc_223 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_224, + end_r_225, + jump_308, + loc_223, + after_tag_483}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_19 = *(uintptr_t *) tmpcur_711; + GibCursor tmpcur_731 = GIB_UNTAG(tagged_tmpcur_19); + GibCursor tmpaftercur_732 = tmpcur_711 + 8; + uint16_t tmptag_733 = GIB_GET_TAG(tagged_tmpcur_19); + GibCursor end_from_tagged_indr_335 = tmpcur_731 + tmptag_733; + GibCursor jump_337 = tmpcur_711 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_18 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_335, end_r_225, loc_223, tmpcur_731); + GibCursor pvrtmp_734 = tmp_struct_18.field0; + GibCursor pvrtmp_735 = tmp_struct_18.field1; + GibCursor pvrtmp_736 = tmp_struct_18.field2; + GibCursor pvrtmp_737 = tmp_struct_18.field3; + GibCursor pvrtmp_738 = tmp_struct_18.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_224, + pvrtmp_735, + jump_337, + pvrtmp_737, + pvrtmp_738}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_21 = *(uintptr_t *) tmpcur_711; + GibCursor tmpcur_745 = GIB_UNTAG(tagged_tmpcur_21); + GibCursor tmpaftercur_746 = tmpcur_711 + 8; + uint16_t tmptag_747 = GIB_GET_TAG(tagged_tmpcur_21); + GibCursor end_from_tagged_indr_335 = tmpcur_745 + tmptag_747; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_20 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_335, end_r_225, loc_223, tmpcur_745); + GibCursor pvrtmp_748 = tmp_struct_20.field0; + GibCursor pvrtmp_749 = tmp_struct_20.field1; + GibCursor pvrtmp_750 = tmp_struct_20.field2; + GibCursor pvrtmp_751 = tmp_struct_20.field3; + GibCursor pvrtmp_752 = tmp_struct_20.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_748, + pvrtmp_749, + pvrtmp_750, + pvrtmp_751, + pvrtmp_752}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_710"); + exit(1); + } + } +} +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_227, + GibCursor arg_48_83_123) +{ + GibPackedTag tmpval_760 = *(GibPackedTag *) arg_48_83_123; + GibCursor tmpcur_761 = arg_48_83_123 + 1; + + + switch_776: + ; + switch (tmpval_760) { + + case 0: + { + GibInt tmpval_762 = *(GibInt *) tmpcur_761; + GibCursor tmpcur_763 = tmpcur_761 + sizeof(GibInt); + GibCursorGibCursorProd tmp_struct_22 = + _traverse_ConsIntList(end_r_227, tmpcur_763); + GibCursor pvrtmp_764 = tmp_struct_22.field0; + GibCursor pvrtmp_765 = tmp_struct_22.field1; + + return (GibCursorGibCursorProd) {pvrtmp_764, pvrtmp_765}; + break; + } + + case 1: + { + GibCursor jump_313 = arg_48_83_123 + 1; + + return (GibCursorGibCursorProd) {end_r_227, jump_313}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_24 = *(uintptr_t *) tmpcur_761; + GibCursor tmpcur_766 = GIB_UNTAG(tagged_tmpcur_24); + GibCursor tmpaftercur_767 = tmpcur_761 + 8; + uint16_t tmptag_768 = GIB_GET_TAG(tagged_tmpcur_24); + GibCursor end_from_tagged_indr_341 = tmpcur_766 + tmptag_768; + GibCursor jump_343 = tmpcur_761 + 8; + GibCursorGibCursorProd tmp_struct_23 = + _traverse_ConsIntList(end_from_tagged_indr_341, tmpcur_766); + GibCursor pvrtmp_769 = tmp_struct_23.field0; + GibCursor pvrtmp_770 = tmp_struct_23.field1; + + return (GibCursorGibCursorProd) {end_r_227, jump_343}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_26 = *(uintptr_t *) tmpcur_761; + GibCursor tmpcur_771 = GIB_UNTAG(tagged_tmpcur_26); + GibCursor tmpaftercur_772 = tmpcur_761 + 8; + uint16_t tmptag_773 = GIB_GET_TAG(tagged_tmpcur_26); + GibCursor end_from_tagged_indr_341 = tmpcur_771 + tmptag_773; + GibCursorGibCursorProd tmp_struct_25 = + _traverse_ConsIntList(end_from_tagged_indr_341, tmpcur_771); + GibCursor pvrtmp_774 = tmp_struct_25.field0; + GibCursor pvrtmp_775 = tmp_struct_25.field1; + + return (GibCursorGibCursorProd) {pvrtmp_774, pvrtmp_775}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_760"); + exit(1); + } + } +} +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_229, + GibCursor arg_53_87_127) +{ + GibPackedTag tmpval_777 = *(GibPackedTag *) arg_53_87_127; + GibCursor tmpcur_778 = arg_53_87_127 + 1; + + + switch_793: + ; + switch (tmpval_777) { + + case 0: + { + GibInt tmpval_779 = *(GibInt *) tmpcur_778; + GibCursor tmpcur_780 = tmpcur_778 + sizeof(GibInt); + unsigned char wildcard_58_90_130 = gib_print_symbol(610); + unsigned char wildcard_61_91_131 = gib_print_symbol(613); + unsigned char y_56_92_132 = printf("%ld", tmpval_779); + unsigned char wildcard_60_93_133 = gib_print_symbol(613); + GibCursorGibCursorProd tmp_struct_27 = + _print_ConsIntList(end_r_229, tmpcur_780); + GibCursor pvrtmp_781 = tmp_struct_27.field0; + GibCursor pvrtmp_782 = tmp_struct_27.field1; + unsigned char wildcard_59_95_135 = gib_print_symbol(608); + + return (GibCursorGibCursorProd) {pvrtmp_781, pvrtmp_782}; + break; + } + + case 1: + { + GibCursor jump_318 = arg_53_87_127 + 1; + unsigned char wildcard_62_96_136 = gib_print_symbol(609); + unsigned char wildcard_63_97_137 = gib_print_symbol(608); + + return (GibCursorGibCursorProd) {end_r_229, jump_318}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_29 = *(uintptr_t *) tmpcur_778; + GibCursor tmpcur_783 = GIB_UNTAG(tagged_tmpcur_29); + GibCursor tmpaftercur_784 = tmpcur_778 + 8; + uint16_t tmptag_785 = GIB_GET_TAG(tagged_tmpcur_29); + GibCursor end_from_tagged_indr_347 = tmpcur_783 + tmptag_785; + GibCursor jump_349 = tmpcur_778 + 8; + unsigned char wildcard_352 = gib_print_symbol(612); + GibCursorGibCursorProd tmp_struct_28 = + _print_ConsIntList(end_from_tagged_indr_347, tmpcur_783); + GibCursor pvrtmp_786 = tmp_struct_28.field0; + GibCursor pvrtmp_787 = tmp_struct_28.field1; + + return (GibCursorGibCursorProd) {end_r_229, jump_349}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_31 = *(uintptr_t *) tmpcur_778; + GibCursor tmpcur_788 = GIB_UNTAG(tagged_tmpcur_31); + GibCursor tmpaftercur_789 = tmpcur_778 + 8; + uint16_t tmptag_790 = GIB_GET_TAG(tagged_tmpcur_31); + GibCursor end_from_tagged_indr_347 = tmpcur_788 + tmptag_790; + unsigned char wildcard_352 = gib_print_symbol(611); + GibCursorGibCursorProd tmp_struct_30 = + _print_ConsIntList(end_from_tagged_indr_347, tmpcur_788); + GibCursor pvrtmp_791 = tmp_struct_30.field0; + GibCursor pvrtmp_792 = tmp_struct_30.field1; + + return (GibCursorGibCursorProd) {pvrtmp_791, pvrtmp_792}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_777"); + exit(1); + } + } +} +int main(int argc, char **argv) +{ + int init_39 = gib_init(argc, argv); + + info_table_initialize(); + symbol_table_initialize(); + + GibInt n_13_64_101 = gib_get_size_param(); + GibChunk region_614 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_235 = region_614.start; + GibCursor end_r_235 = region_614.end; + GibCursorGibCursorGibCursorProd tmp_struct_32 = + mkConsIntList(end_r_235, r_235, n_13_64_101); + GibCursor pvrtmp_615 = tmp_struct_32.field0; + GibCursor pvrtmp_616 = tmp_struct_32.field1; + GibCursor pvrtmp_617 = tmp_struct_32.field2; + GibInt timed_555; + GibVector *times_37 = gib_vector_alloc(gib_get_iters_param(), + sizeof(double)); + struct timespec begin_timed_555; + struct timespec end_timed_555; + + for (long long iters_timed_555 = 0; iters_timed_555 < gib_get_iters_param(); + iters_timed_555++) { + if (iters_timed_555 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_555); + + GibCursorGibCursorGibIntProd tmp_struct_33 = + length(pvrtmp_615, pvrtmp_616, 0); + GibCursor pvrtmp_622 = tmp_struct_33.field0; + GibCursor pvrtmp_623 = tmp_struct_33.field1; + GibInt pvrtmp_624 = tmp_struct_33.field2; + + timed_555 = pvrtmp_624; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_555); + if (iters_timed_555 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_restore_state(); + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_34 = gib_difftimespecs(&begin_timed_555, + &end_timed_555); + + printf("itertime: %lf\n", itertime_34); + gib_vector_inplace_update(times_37, iters_timed_555, &itertime_34); + } + gib_vector_inplace_sort(times_37, gib_compare_doubles); + + double *tmp_38 = (double *) gib_vector_nth(times_37, gib_get_iters_param() / + 2); + double selftimed_36 = *tmp_38; + double batchtime_35 = gib_sum_timing_array(times_37); + + gib_print_timing_array(times_37); + gib_vector_free(times_37); + printf("ITERS: %ld\n", gib_get_iters_param()); + printf("SIZE: %ld\n", gib_get_size_param()); + printf("BATCHTIME: %e\n", batchtime_35); + printf("SELFTIMED: %e\n", selftimed_36); + printf("%ld", timed_555); + printf("\n"); + + int exit_40 = gib_exit(); + + return exit_40; +} \ No newline at end of file diff --git a/microbench/tail_recursion/ConsListLength.exe b/microbench/tail_recursion/ConsListLength.exe new file mode 100755 index 000000000..f063bc0eb Binary files /dev/null and b/microbench/tail_recursion/ConsListLength.exe differ diff --git a/microbench/tail_recursion/ConsListLengthTailRec.c b/microbench/tail_recursion/ConsListLengthTailRec.c new file mode 100644 index 000000000..5e4dd0c58 --- /dev/null +++ b/microbench/tail_recursion/ConsListLengthTailRec.c @@ -0,0 +1,718 @@ +/* Gibbon program. */ + +#include "gibbon_rts.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN64 +#include +#endif + +#ifdef _GIBBON_POINTER +#include +#endif + +#ifdef _GIBBON_PARALLEL +#include +#include +#endif + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Program starts here + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +typedef struct GibIntProd_struct { + GibInt field0; + } GibIntProd; +typedef struct GibIntGibCursorProd_struct { + GibInt field0; + GibCursor field1; + } GibIntGibCursorProd; +typedef struct GibBoolProd_struct { + GibBool field0; + } GibBoolProd; +typedef struct GibPackedTagGibCursorProd_struct { + GibPackedTag field0; + GibCursor field1; + } GibPackedTagGibCursorProd; +typedef struct GibCursorProd_struct { + GibCursor field0; + } GibCursorProd; +typedef struct GibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + } GibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibIntProd_struct { + GibCursor field0; + GibCursor field1; + GibInt field2; + } GibCursorGibCursorGibIntProd; +typedef struct GibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + } GibCursorGibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + GibCursor field3; + GibCursor field4; + } GibCursorGibCursorGibCursorGibCursorGibCursorProd; +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_215, + GibCursor loc_214, + GibInt len_16_67_104); +GibCursorGibCursorGibIntProd length(GibCursor end_r_217, + GibCursor lst_18_69_108, + GibInt accum_19_70_109); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_ConsIntList(GibCursor end_r_220, GibCursor end_r_221, GibCursor loc_219, + GibCursor arg_38_73_113); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_without_ptrs_ConsIntList(GibCursor end_r_224, GibCursor end_r_225, + GibCursor loc_223, GibCursor arg_43_78_118); +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_227, + GibCursor arg_48_83_123); +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_229, + GibCursor arg_53_87_127); +typedef enum { + GibInt_T, + GibFloat_T, + GibSym_T, + GibBool_T, + GibVector_T, + GibList_T, + GibCursor_T, + ConsIntList_T, + } GibDatatype; +void info_table_initialize(void) +{ + int error = gib_info_table_initialize(8); + + if (error < 0) { + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + exit(1); + } + + GibDatatype field_tys[2]; + + field_tys[0] = ConsIntList_T; + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 0, 8, 0, 1, 1, + field_tys, 1); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 0); + exit(1); + } + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 1, 0, 0, 0, 0, + field_tys, 0); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 1); + exit(1); + } + gib_info_table_finalize(); +} +void symbol_table_initialize(void) +{ + gib_add_symbol(608, ")"); + gib_add_symbol(609, "(Nil"); + gib_add_symbol(610, "(Cons"); + gib_add_symbol(611, " ->r "); + gib_add_symbol(612, " ->i "); + gib_add_symbol(613, " "); +} +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_215, + GibCursor loc_214, + GibInt len_16_67_104) +{ + if (loc_214 + 18 > end_r_215) { + gib_grow_region(&loc_214, &end_r_215); + } + + GibBool fltIf_98_105 = len_16_67_104 <= 0; + + if (fltIf_98_105) { + *(GibPackedTag *) loc_214 = 1; + + GibCursor writetag_404 = loc_214 + 1; + GibCursor after_tag_405 = loc_214 + 1; + + return (GibCursorGibCursorGibCursorProd) {end_r_215, loc_214, + after_tag_405}; + } else { + GibInt fltAppE_99_106 = len_16_67_104 - 1; + GibCursor loc_239 = loc_214 + 9; + + *(GibPackedTag *) loc_214 = 0; + + GibCursor writetag_413 = loc_214 + 1; + GibCursor after_tag_414 = loc_214 + 1; + + *(GibInt *) after_tag_414 = len_16_67_104; + + GibCursor writecur_418 = after_tag_414 + sizeof(GibInt); + GibCursorGibCursorGibCursorProd tmp_struct_0 = + mkConsIntList(end_r_215, loc_239, fltAppE_99_106); + GibCursor pvrtmp_629 = tmp_struct_0.field0; + GibCursor pvrtmp_630 = tmp_struct_0.field1; + GibCursor pvrtmp_631 = tmp_struct_0.field2; + + return (GibCursorGibCursorGibCursorProd) {pvrtmp_629, loc_214, + pvrtmp_631}; + } +} +GibCursorGibCursorGibIntProd length(GibCursor end_r_217, + GibCursor lst_18_69_108, + GibInt accum_19_70_109) +{ + GibPackedTag tmpval_640 = *(GibPackedTag *) lst_18_69_108; + GibCursor tmpcur_641 = lst_18_69_108 + 1; + + + switch_659: + ; + switch (tmpval_640) { + + case 1: + { + GibCursor jump_296 = lst_18_69_108 + 1; + + return (GibCursorGibCursorGibIntProd) {end_r_217, jump_296, + accum_19_70_109}; + break; + } + + case 0: + { + GibInt tmpval_642 = *(GibInt *) tmpcur_641; + GibCursor tmpcur_643 = tmpcur_641 + sizeof(GibInt); + GibInt fltAppE_100_112 = accum_19_70_109 + 1; + return length(end_r_217, tmpcur_643, fltAppE_100_112); + // GibCursor pvrtmp_644 = tmp_struct_4.field0; + // GibCursor pvrtmp_645 = tmp_struct_4.field1; + // GibInt pvrtmp_646 = tmp_struct_4.field2; + + // return (GibCursorGibCursorGibIntProd) {pvrtmp_644, pvrtmp_645, + // pvrtmp_646}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_6 = *(uintptr_t *) tmpcur_641; + GibCursor tmpcur_647 = GIB_UNTAG(tagged_tmpcur_6); + GibCursor tmpaftercur_648 = tmpcur_641 + 8; + uint16_t tmptag_649 = GIB_GET_TAG(tagged_tmpcur_6); + GibCursor end_from_tagged_indr_323 = tmpcur_647 + tmptag_649; + GibCursor jump_325 = tmpcur_641 + 8; + GibCursorGibCursorGibIntProd tmp_struct_5 = + length(end_from_tagged_indr_323, tmpcur_647, accum_19_70_109); + GibCursor pvrtmp_650 = tmp_struct_5.field0; + GibCursor pvrtmp_651 = tmp_struct_5.field1; + GibInt pvrtmp_652 = tmp_struct_5.field2; + + return (GibCursorGibCursorGibIntProd) {end_r_217, jump_325, + pvrtmp_652}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_8 = *(uintptr_t *) tmpcur_641; + GibCursor tmpcur_653 = GIB_UNTAG(tagged_tmpcur_8); + GibCursor tmpaftercur_654 = tmpcur_641 + 8; + uint16_t tmptag_655 = GIB_GET_TAG(tagged_tmpcur_8); + GibCursor end_from_tagged_indr_323 = tmpcur_653 + tmptag_655; + return length(end_from_tagged_indr_323, tmpcur_653, accum_19_70_109); + // GibCursor pvrtmp_656 = tmp_struct_7.field0; + // GibCursor pvrtmp_657 = tmp_struct_7.field1; + // GibInt pvrtmp_658 = tmp_struct_7.field2; + + // return (GibCursorGibCursorGibIntProd) {pvrtmp_656, pvrtmp_657, + // pvrtmp_658}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_640"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_ConsIntList(GibCursor end_r_220, + GibCursor end_r_221, + GibCursor loc_219, + GibCursor arg_38_73_113) +{ + if (loc_219 + 18 > end_r_221) { + gib_grow_region(&loc_219, &end_r_221); + } + + GibPackedTag tmpval_660 = *(GibPackedTag *) arg_38_73_113; + GibCursor tmpcur_661 = arg_38_73_113 + 1; + + + switch_709: + ; + switch (tmpval_660) { + + case 0: + { + GibInt tmpval_662 = *(GibInt *) tmpcur_661; + GibCursor tmpcur_663 = tmpcur_661 + sizeof(GibInt); + GibCursor loc_257 = loc_219 + 9; + + *(GibPackedTag *) loc_219 = 0; + + GibCursor writetag_440 = loc_219 + 1; + GibCursor after_tag_441 = loc_219 + 1; + + *(GibInt *) after_tag_441 = tmpval_662; + + GibCursor writecur_445 = after_tag_441 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_9 = + _copy_ConsIntList(end_r_220, end_r_221, loc_257, tmpcur_663); + GibCursor pvrtmp_664 = tmp_struct_9.field0; + GibCursor pvrtmp_665 = tmp_struct_9.field1; + GibCursor pvrtmp_666 = tmp_struct_9.field2; + GibCursor pvrtmp_667 = tmp_struct_9.field3; + GibCursor pvrtmp_668 = tmp_struct_9.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_664, + pvrtmp_665, + pvrtmp_666, + loc_219, + pvrtmp_668}; + break; + } + + case 1: + { + GibCursor jump_303 = arg_38_73_113 + 1; + + *(GibPackedTag *) loc_219 = 1; + + GibCursor writetag_450 = loc_219 + 1; + GibCursor after_tag_451 = loc_219 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_220, + end_r_221, + jump_303, + loc_219, + after_tag_451}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_11 = *(uintptr_t *) tmpcur_661; + GibCursor tmpcur_681 = GIB_UNTAG(tagged_tmpcur_11); + GibCursor tmpaftercur_682 = tmpcur_661 + 8; + uint16_t tmptag_683 = GIB_GET_TAG(tagged_tmpcur_11); + GibCursor end_from_tagged_indr_329 = tmpcur_681 + tmptag_683; + GibCursor jump_331 = tmpcur_661 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_10 = + _copy_ConsIntList(end_from_tagged_indr_329, end_r_221, loc_219, tmpcur_681); + GibCursor pvrtmp_684 = tmp_struct_10.field0; + GibCursor pvrtmp_685 = tmp_struct_10.field1; + GibCursor pvrtmp_686 = tmp_struct_10.field2; + GibCursor pvrtmp_687 = tmp_struct_10.field3; + GibCursor pvrtmp_688 = tmp_struct_10.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_220, + pvrtmp_685, + jump_331, + pvrtmp_687, + pvrtmp_688}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_13 = *(uintptr_t *) tmpcur_661; + GibCursor tmpcur_695 = GIB_UNTAG(tagged_tmpcur_13); + GibCursor tmpaftercur_696 = tmpcur_661 + 8; + uint16_t tmptag_697 = GIB_GET_TAG(tagged_tmpcur_13); + GibCursor end_from_tagged_indr_329 = tmpcur_695 + tmptag_697; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_12 = + _copy_ConsIntList(end_from_tagged_indr_329, end_r_221, loc_219, tmpcur_695); + GibCursor pvrtmp_698 = tmp_struct_12.field0; + GibCursor pvrtmp_699 = tmp_struct_12.field1; + GibCursor pvrtmp_700 = tmp_struct_12.field2; + GibCursor pvrtmp_701 = tmp_struct_12.field3; + GibCursor pvrtmp_702 = tmp_struct_12.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_698, + pvrtmp_699, + pvrtmp_700, + pvrtmp_701, + pvrtmp_702}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_660"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_without_ptrs_ConsIntList(GibCursor end_r_224, + GibCursor end_r_225, + GibCursor loc_223, + GibCursor arg_43_78_118) +{ + GibPackedTag tmpval_710 = *(GibPackedTag *) arg_43_78_118; + GibCursor tmpcur_711 = arg_43_78_118 + 1; + + + switch_759: + ; + switch (tmpval_710) { + + case 0: + { + GibInt tmpval_712 = *(GibInt *) tmpcur_711; + GibCursor tmpcur_713 = tmpcur_711 + sizeof(GibInt); + GibCursor loc_270 = loc_223 + 9; + + *(GibPackedTag *) loc_223 = 0; + + GibCursor writetag_472 = loc_223 + 1; + GibCursor after_tag_473 = loc_223 + 1; + + *(GibInt *) after_tag_473 = tmpval_712; + + GibCursor writecur_477 = after_tag_473 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_17 = + _copy_without_ptrs_ConsIntList(end_r_224, end_r_225, loc_270, tmpcur_713); + GibCursor pvrtmp_714 = tmp_struct_17.field0; + GibCursor pvrtmp_715 = tmp_struct_17.field1; + GibCursor pvrtmp_716 = tmp_struct_17.field2; + GibCursor pvrtmp_717 = tmp_struct_17.field3; + GibCursor pvrtmp_718 = tmp_struct_17.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_714, + pvrtmp_715, + pvrtmp_716, + loc_223, + pvrtmp_718}; + break; + } + + case 1: + { + GibCursor jump_308 = arg_43_78_118 + 1; + + *(GibPackedTag *) loc_223 = 1; + + GibCursor writetag_482 = loc_223 + 1; + GibCursor after_tag_483 = loc_223 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_224, + end_r_225, + jump_308, + loc_223, + after_tag_483}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_19 = *(uintptr_t *) tmpcur_711; + GibCursor tmpcur_731 = GIB_UNTAG(tagged_tmpcur_19); + GibCursor tmpaftercur_732 = tmpcur_711 + 8; + uint16_t tmptag_733 = GIB_GET_TAG(tagged_tmpcur_19); + GibCursor end_from_tagged_indr_335 = tmpcur_731 + tmptag_733; + GibCursor jump_337 = tmpcur_711 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_18 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_335, end_r_225, loc_223, tmpcur_731); + GibCursor pvrtmp_734 = tmp_struct_18.field0; + GibCursor pvrtmp_735 = tmp_struct_18.field1; + GibCursor pvrtmp_736 = tmp_struct_18.field2; + GibCursor pvrtmp_737 = tmp_struct_18.field3; + GibCursor pvrtmp_738 = tmp_struct_18.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_224, + pvrtmp_735, + jump_337, + pvrtmp_737, + pvrtmp_738}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_21 = *(uintptr_t *) tmpcur_711; + GibCursor tmpcur_745 = GIB_UNTAG(tagged_tmpcur_21); + GibCursor tmpaftercur_746 = tmpcur_711 + 8; + uint16_t tmptag_747 = GIB_GET_TAG(tagged_tmpcur_21); + GibCursor end_from_tagged_indr_335 = tmpcur_745 + tmptag_747; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_20 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_335, end_r_225, loc_223, tmpcur_745); + GibCursor pvrtmp_748 = tmp_struct_20.field0; + GibCursor pvrtmp_749 = tmp_struct_20.field1; + GibCursor pvrtmp_750 = tmp_struct_20.field2; + GibCursor pvrtmp_751 = tmp_struct_20.field3; + GibCursor pvrtmp_752 = tmp_struct_20.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_748, + pvrtmp_749, + pvrtmp_750, + pvrtmp_751, + pvrtmp_752}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_710"); + exit(1); + } + } +} +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_227, + GibCursor arg_48_83_123) +{ + GibPackedTag tmpval_760 = *(GibPackedTag *) arg_48_83_123; + GibCursor tmpcur_761 = arg_48_83_123 + 1; + + + switch_776: + ; + switch (tmpval_760) { + + case 0: + { + GibInt tmpval_762 = *(GibInt *) tmpcur_761; + GibCursor tmpcur_763 = tmpcur_761 + sizeof(GibInt); + GibCursorGibCursorProd tmp_struct_22 = + _traverse_ConsIntList(end_r_227, tmpcur_763); + GibCursor pvrtmp_764 = tmp_struct_22.field0; + GibCursor pvrtmp_765 = tmp_struct_22.field1; + + return (GibCursorGibCursorProd) {pvrtmp_764, pvrtmp_765}; + break; + } + + case 1: + { + GibCursor jump_313 = arg_48_83_123 + 1; + + return (GibCursorGibCursorProd) {end_r_227, jump_313}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_24 = *(uintptr_t *) tmpcur_761; + GibCursor tmpcur_766 = GIB_UNTAG(tagged_tmpcur_24); + GibCursor tmpaftercur_767 = tmpcur_761 + 8; + uint16_t tmptag_768 = GIB_GET_TAG(tagged_tmpcur_24); + GibCursor end_from_tagged_indr_341 = tmpcur_766 + tmptag_768; + GibCursor jump_343 = tmpcur_761 + 8; + GibCursorGibCursorProd tmp_struct_23 = + _traverse_ConsIntList(end_from_tagged_indr_341, tmpcur_766); + GibCursor pvrtmp_769 = tmp_struct_23.field0; + GibCursor pvrtmp_770 = tmp_struct_23.field1; + + return (GibCursorGibCursorProd) {end_r_227, jump_343}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_26 = *(uintptr_t *) tmpcur_761; + GibCursor tmpcur_771 = GIB_UNTAG(tagged_tmpcur_26); + GibCursor tmpaftercur_772 = tmpcur_761 + 8; + uint16_t tmptag_773 = GIB_GET_TAG(tagged_tmpcur_26); + GibCursor end_from_tagged_indr_341 = tmpcur_771 + tmptag_773; + GibCursorGibCursorProd tmp_struct_25 = + _traverse_ConsIntList(end_from_tagged_indr_341, tmpcur_771); + GibCursor pvrtmp_774 = tmp_struct_25.field0; + GibCursor pvrtmp_775 = tmp_struct_25.field1; + + return (GibCursorGibCursorProd) {pvrtmp_774, pvrtmp_775}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_760"); + exit(1); + } + } +} +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_229, + GibCursor arg_53_87_127) +{ + GibPackedTag tmpval_777 = *(GibPackedTag *) arg_53_87_127; + GibCursor tmpcur_778 = arg_53_87_127 + 1; + + + switch_793: + ; + switch (tmpval_777) { + + case 0: + { + GibInt tmpval_779 = *(GibInt *) tmpcur_778; + GibCursor tmpcur_780 = tmpcur_778 + sizeof(GibInt); + unsigned char wildcard_58_90_130 = gib_print_symbol(610); + unsigned char wildcard_61_91_131 = gib_print_symbol(613); + unsigned char y_56_92_132 = printf("%ld", tmpval_779); + unsigned char wildcard_60_93_133 = gib_print_symbol(613); + GibCursorGibCursorProd tmp_struct_27 = + _print_ConsIntList(end_r_229, tmpcur_780); + GibCursor pvrtmp_781 = tmp_struct_27.field0; + GibCursor pvrtmp_782 = tmp_struct_27.field1; + unsigned char wildcard_59_95_135 = gib_print_symbol(608); + + return (GibCursorGibCursorProd) {pvrtmp_781, pvrtmp_782}; + break; + } + + case 1: + { + GibCursor jump_318 = arg_53_87_127 + 1; + unsigned char wildcard_62_96_136 = gib_print_symbol(609); + unsigned char wildcard_63_97_137 = gib_print_symbol(608); + + return (GibCursorGibCursorProd) {end_r_229, jump_318}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_29 = *(uintptr_t *) tmpcur_778; + GibCursor tmpcur_783 = GIB_UNTAG(tagged_tmpcur_29); + GibCursor tmpaftercur_784 = tmpcur_778 + 8; + uint16_t tmptag_785 = GIB_GET_TAG(tagged_tmpcur_29); + GibCursor end_from_tagged_indr_347 = tmpcur_783 + tmptag_785; + GibCursor jump_349 = tmpcur_778 + 8; + unsigned char wildcard_352 = gib_print_symbol(612); + GibCursorGibCursorProd tmp_struct_28 = + _print_ConsIntList(end_from_tagged_indr_347, tmpcur_783); + GibCursor pvrtmp_786 = tmp_struct_28.field0; + GibCursor pvrtmp_787 = tmp_struct_28.field1; + + return (GibCursorGibCursorProd) {end_r_229, jump_349}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_31 = *(uintptr_t *) tmpcur_778; + GibCursor tmpcur_788 = GIB_UNTAG(tagged_tmpcur_31); + GibCursor tmpaftercur_789 = tmpcur_778 + 8; + uint16_t tmptag_790 = GIB_GET_TAG(tagged_tmpcur_31); + GibCursor end_from_tagged_indr_347 = tmpcur_788 + tmptag_790; + unsigned char wildcard_352 = gib_print_symbol(611); + GibCursorGibCursorProd tmp_struct_30 = + _print_ConsIntList(end_from_tagged_indr_347, tmpcur_788); + GibCursor pvrtmp_791 = tmp_struct_30.field0; + GibCursor pvrtmp_792 = tmp_struct_30.field1; + + return (GibCursorGibCursorProd) {pvrtmp_791, pvrtmp_792}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_777"); + exit(1); + } + } +} +int main(int argc, char **argv) +{ + int init_39 = gib_init(argc, argv); + + info_table_initialize(); + symbol_table_initialize(); + + GibInt n_13_64_101 = gib_get_size_param(); + GibChunk region_614 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_235 = region_614.start; + GibCursor end_r_235 = region_614.end; + GibCursorGibCursorGibCursorProd tmp_struct_32 = + mkConsIntList(end_r_235, r_235, n_13_64_101); + GibCursor pvrtmp_615 = tmp_struct_32.field0; + GibCursor pvrtmp_616 = tmp_struct_32.field1; + GibCursor pvrtmp_617 = tmp_struct_32.field2; + GibInt timed_555; + GibVector *times_37 = gib_vector_alloc(gib_get_iters_param(), + sizeof(double)); + struct timespec begin_timed_555; + struct timespec end_timed_555; + + for (long long iters_timed_555 = 0; iters_timed_555 < gib_get_iters_param(); + iters_timed_555++) { + if (iters_timed_555 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_555); + + GibCursorGibCursorGibIntProd tmp_struct_33 = + length(pvrtmp_615, pvrtmp_616, 0); + GibCursor pvrtmp_622 = tmp_struct_33.field0; + GibCursor pvrtmp_623 = tmp_struct_33.field1; + GibInt pvrtmp_624 = tmp_struct_33.field2; + + timed_555 = pvrtmp_624; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_555); + if (iters_timed_555 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_restore_state(); + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_34 = gib_difftimespecs(&begin_timed_555, + &end_timed_555); + + printf("itertime: %lf\n", itertime_34); + gib_vector_inplace_update(times_37, iters_timed_555, &itertime_34); + } + gib_vector_inplace_sort(times_37, gib_compare_doubles); + + double *tmp_38 = (double *) gib_vector_nth(times_37, gib_get_iters_param() / + 2); + double selftimed_36 = *tmp_38; + double batchtime_35 = gib_sum_timing_array(times_37); + + gib_print_timing_array(times_37); + gib_vector_free(times_37); + printf("ITERS: %ld\n", gib_get_iters_param()); + printf("SIZE: %ld\n", gib_get_size_param()); + printf("BATCHTIME: %e\n", batchtime_35); + printf("SELFTIMED: %e\n", selftimed_36); + printf("%ld", timed_555); + printf("\n"); + + int exit_40 = gib_exit(); + + return exit_40; +} \ No newline at end of file diff --git a/microbench/tail_recursion/ConsListLengthTailRec.exe b/microbench/tail_recursion/ConsListLengthTailRec.exe new file mode 100755 index 000000000..69d993a5e Binary files /dev/null and b/microbench/tail_recursion/ConsListLengthTailRec.exe differ diff --git a/microbench/tail_recursion/ConsListLengthTailRecNoSibling.exe b/microbench/tail_recursion/ConsListLengthTailRecNoSibling.exe new file mode 100755 index 000000000..19d8ffb12 Binary files /dev/null and b/microbench/tail_recursion/ConsListLengthTailRecNoSibling.exe differ diff --git a/microbench/tail_recursion/InsertionNoTailCallOpt.exe b/microbench/tail_recursion/InsertionNoTailCallOpt.exe new file mode 100755 index 000000000..00f3bf9ae Binary files /dev/null and b/microbench/tail_recursion/InsertionNoTailCallOpt.exe differ diff --git a/microbench/tail_recursion/InsertionNoTailCallOpt.s b/microbench/tail_recursion/InsertionNoTailCallOpt.s new file mode 100644 index 000000000..faed6406c --- /dev/null +++ b/microbench/tail_recursion/InsertionNoTailCallOpt.s @@ -0,0 +1,4126 @@ + +InsertionNoTailCallOpt.exe: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: +_init(): + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 4f 00 00 mov 0x4fd1(%rip),%rax # 405fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 : + 401020: ff 35 ca 4f 00 00 push 0x4fca(%rip) # 405ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 4f 00 00 jmp *0x4fcc(%rip) # 405ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401030 : + 401030: ff 25 ca 4f 00 00 jmp *0x4fca(%rip) # 406000 + 401036: 68 00 00 00 00 push $0x0 + 40103b: e9 e0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401040 : + 401040: ff 25 c2 4f 00 00 jmp *0x4fc2(%rip) # 406008 + 401046: 68 01 00 00 00 push $0x1 + 40104b: e9 d0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401050 : + 401050: ff 25 ba 4f 00 00 jmp *0x4fba(%rip) # 406010 + 401056: 68 02 00 00 00 push $0x2 + 40105b: e9 c0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401060 : + 401060: ff 25 b2 4f 00 00 jmp *0x4fb2(%rip) # 406018 + 401066: 68 03 00 00 00 push $0x3 + 40106b: e9 b0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401070 : + 401070: ff 25 aa 4f 00 00 jmp *0x4faa(%rip) # 406020 + 401076: 68 04 00 00 00 push $0x4 + 40107b: e9 a0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401080 : + 401080: ff 25 a2 4f 00 00 jmp *0x4fa2(%rip) # 406028 + 401086: 68 05 00 00 00 push $0x5 + 40108b: e9 90 ff ff ff jmp 401020 <_init+0x20> + +0000000000401090 : + 401090: ff 25 9a 4f 00 00 jmp *0x4f9a(%rip) # 406030 + 401096: 68 06 00 00 00 push $0x6 + 40109b: e9 80 ff ff ff jmp 401020 <_init+0x20> + +00000000004010a0 : + 4010a0: ff 25 92 4f 00 00 jmp *0x4f92(%rip) # 406038 + 4010a6: 68 07 00 00 00 push $0x7 + 4010ab: e9 70 ff ff ff jmp 401020 <_init+0x20> + +00000000004010b0 : + 4010b0: ff 25 8a 4f 00 00 jmp *0x4f8a(%rip) # 406040 + 4010b6: 68 08 00 00 00 push $0x8 + 4010bb: e9 60 ff ff ff jmp 401020 <_init+0x20> + +00000000004010c0 : + 4010c0: ff 25 82 4f 00 00 jmp *0x4f82(%rip) # 406048 + 4010c6: 68 09 00 00 00 push $0x9 + 4010cb: e9 50 ff ff ff jmp 401020 <_init+0x20> + +00000000004010d0 : + 4010d0: ff 25 7a 4f 00 00 jmp *0x4f7a(%rip) # 406050 + 4010d6: 68 0a 00 00 00 push $0xa + 4010db: e9 40 ff ff ff jmp 401020 <_init+0x20> + +00000000004010e0 <__assert_fail@plt>: + 4010e0: ff 25 72 4f 00 00 jmp *0x4f72(%rip) # 406058 <__assert_fail@GLIBC_2.2.5> + 4010e6: 68 0b 00 00 00 push $0xb + 4010eb: e9 30 ff ff ff jmp 401020 <_init+0x20> + +00000000004010f0 : + 4010f0: ff 25 6a 4f 00 00 jmp *0x4f6a(%rip) # 406060 + 4010f6: 68 0c 00 00 00 push $0xc + 4010fb: e9 20 ff ff ff jmp 401020 <_init+0x20> + +0000000000401100 : + 401100: ff 25 62 4f 00 00 jmp *0x4f62(%rip) # 406068 + 401106: 68 0d 00 00 00 push $0xd + 40110b: e9 10 ff ff ff jmp 401020 <_init+0x20> + +0000000000401110 : + 401110: ff 25 5a 4f 00 00 jmp *0x4f5a(%rip) # 406070 + 401116: 68 0e 00 00 00 push $0xe + 40111b: e9 00 ff ff ff jmp 401020 <_init+0x20> + +0000000000401120 : + 401120: ff 25 52 4f 00 00 jmp *0x4f52(%rip) # 406078 + 401126: 68 0f 00 00 00 push $0xf + 40112b: e9 f0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401130 : + 401130: ff 25 4a 4f 00 00 jmp *0x4f4a(%rip) # 406080 + 401136: 68 10 00 00 00 push $0x10 + 40113b: e9 e0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401140 : + 401140: ff 25 42 4f 00 00 jmp *0x4f42(%rip) # 406088 + 401146: 68 11 00 00 00 push $0x11 + 40114b: e9 d0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401150 : + 401150: ff 25 3a 4f 00 00 jmp *0x4f3a(%rip) # 406090 + 401156: 68 12 00 00 00 push $0x12 + 40115b: e9 c0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401160 : + 401160: ff 25 32 4f 00 00 jmp *0x4f32(%rip) # 406098 + 401166: 68 13 00 00 00 push $0x13 + 40116b: e9 b0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401170 : + 401170: ff 25 2a 4f 00 00 jmp *0x4f2a(%rip) # 4060a0 + 401176: 68 14 00 00 00 push $0x14 + 40117b: e9 a0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401180 : + 401180: ff 25 22 4f 00 00 jmp *0x4f22(%rip) # 4060a8 + 401186: 68 15 00 00 00 push $0x15 + 40118b: e9 90 fe ff ff jmp 401020 <_init+0x20> + +0000000000401190 : + 401190: ff 25 1a 4f 00 00 jmp *0x4f1a(%rip) # 4060b0 + 401196: 68 16 00 00 00 push $0x16 + 40119b: e9 80 fe ff ff jmp 401020 <_init+0x20> + +00000000004011a0 : + 4011a0: ff 25 12 4f 00 00 jmp *0x4f12(%rip) # 4060b8 + 4011a6: 68 17 00 00 00 push $0x17 + 4011ab: e9 70 fe ff ff jmp 401020 <_init+0x20> + +00000000004011b0 : + 4011b0: ff 25 0a 4f 00 00 jmp *0x4f0a(%rip) # 4060c0 + 4011b6: 68 18 00 00 00 push $0x18 + 4011bb: e9 60 fe ff ff jmp 401020 <_init+0x20> + +00000000004011c0 : + 4011c0: ff 25 02 4f 00 00 jmp *0x4f02(%rip) # 4060c8 + 4011c6: 68 19 00 00 00 push $0x19 + 4011cb: e9 50 fe ff ff jmp 401020 <_init+0x20> + +00000000004011d0 : + 4011d0: ff 25 fa 4e 00 00 jmp *0x4efa(%rip) # 4060d0 + 4011d6: 68 1a 00 00 00 push $0x1a + 4011db: e9 40 fe ff ff jmp 401020 <_init+0x20> + +Disassembly of section .text: + +00000000004011e0
: +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:405 + return tailapp_1228; + } + } +} +int main(int argc, char **argv) +{ + 4011e0: 41 57 push %r15 + 4011e2: 41 56 push %r14 + 4011e4: 41 55 push %r13 + 4011e6: 41 54 push %r12 + 4011e8: 55 push %rbp + 4011e9: 53 push %rbx + 4011ea: 89 fb mov %edi,%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1029 + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + +void gib_print_gc_config(void) { + printf("Rust config\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); + 4011ec: bf f0 44 40 00 mov $0x4044f0,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:405 + 4011f1: 48 81 ec 88 00 00 00 sub $0x88,%rsp + 4011f8: 48 89 74 24 10 mov %rsi,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1029 + 4011fd: e8 7e fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1030 + fflush(stdout); + 401202: 48 8b 3d 17 4f 00 00 mov 0x4f17(%rip),%rdi # 406120 + 401209: e8 62 ff ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1031 + gib_print_rust_gc_config(); + 40120e: e8 3d ff ff ff call 401150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1032 + fflush(stdout); + 401213: 48 8b 3d 06 4f 00 00 mov 0x4f06(%rip),%rdi # 406120 + 40121a: e8 51 ff ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1033 + printf("\n"); + 40121f: bf 0a 00 00 00 mov $0xa,%edi + 401224: e8 17 fe ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1036 + + + printf("C config\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); + 401229: bf 28 45 40 00 mov $0x404528,%edi + 40122e: e8 4d fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1040 + +#if defined _GIBBON_GENGC && _GIBBON_GENGC == 0 + #pragma message "Generational GC is disabled." + printf("Generational GC is disabled.\n"); + 401233: bf 43 47 40 00 mov $0x404743,%edi + 401238: e8 43 fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1051 +#if defined _GIBBON_EAGER_PROMOTION && _GIBBON_EAGER_PROMOTION == 0 + #pragma message "Eager promotion is disabled." + printf("Eager promotion is disabled.\n"); +#else + #pragma message "Eager promotion is enabled." + printf("Eager promotion is enabled.\n"); + 40123d: bf 60 47 40 00 mov $0x404760,%edi + 401242: e8 39 fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1056 +#endif + +#if defined _GIBBON_SIMPLE_WRITE_BARRIER && _GIBBON_SIMPLE_WRITE_BARRIER == 0 + #pragma message "Simple write barrier is disabled." + printf("Simple write barrier is disabled.\n"); + 401247: bf 60 45 40 00 mov $0x404560,%edi + 40124c: e8 2f fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1062 +#else + #pragma message "Simple write barrier is enabled." + printf("Simple write barrier is enabled.\n"); +#endif + + printf("Nursery size=%zu\n", (size_t) gib_nursery_size); + 401251: be 00 00 40 00 mov $0x400000,%esi + 401256: bf 7c 47 40 00 mov $0x40477c,%edi + 40125b: 31 c0 xor %eax,%eax + 40125d: e8 5e fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1063 + printf("Max chunk size=%zu\n", (size_t) GIB_MAX_CHUNK_SIZE); + 401262: be dc ff 00 00 mov $0xffdc,%esi + 401267: bf 8e 47 40 00 mov $0x40478e,%edi + 40126c: 31 c0 xor %eax,%eax + 40126e: e8 4d fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1064 + printf("Initial chunk size=%zu\n", (size_t) GIB_INIT_CHUNK_SIZE); + 401273: be 00 02 00 00 mov $0x200,%esi + 401278: bf a2 47 40 00 mov $0x4047a2,%edi + 40127d: 31 c0 xor %eax,%eax + 40127f: e8 3c fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1065 + printf("\n"); + 401284: bf 0a 00 00 00 mov $0xa,%edi + 401289: e8 b2 fd ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1900 + // Print the GC configuration. + gib_print_gc_config(); +#endif + + // Ensure that C and Rust agree on sizes of structs that cross the boundary. + gib_check_rust_struct_sizes(); + 40128e: e8 2d 1c 00 00 call 402ec0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1909 + // num iterations: How many times to repeat a benchmark. + // tree size: An integer passes to `build_tree()`. + + struct rlimit lim; + int code; + if ( (code = getrlimit(RLIMIT_STACK, &lim)) ) { + 401293: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 401298: bf 03 00 00 00 mov $0x3,%edi + 40129d: e8 2e ff ff ff call 4011d0 + 4012a2: 89 44 24 08 mov %eax,0x8(%rsp) + 4012a6: 85 c0 test %eax,%eax + 4012a8: 0f 85 ce 0d 00 00 jne 40207c +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1914 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + exit(1); + } + + lim.rlim_cur = 4 * 1024LU * 1024LU * 1024LU; // 1GB stack. + 4012ae: 48 b8 00 00 00 00 01 movabs $0x100000000,%rax + 4012b5: 00 00 00 + 4012b8: 48 89 44 24 70 mov %rax,0x70(%rsp) + 4012bd: eb 32 jmp 4012f1 + 4012bf: 90 nop +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1922 + + // WARNING: Haven't yet figured out why this doesn't work on MacOS... +#ifndef __APPLE__ + code = setrlimit(RLIMIT_STACK, &lim); + while (code) { + fprintf(stderr, " [gibbon rts] Failed to set stack size to %lu, code %d\n", + 4012c0: 48 8b 54 24 70 mov 0x70(%rsp),%rdx + 4012c5: 48 8b 3d 74 4e 00 00 mov 0x4e74(%rip),%rdi # 406140 + 4012cc: be b8 45 40 00 mov $0x4045b8,%esi + 4012d1: 31 c0 xor %eax,%eax + 4012d3: e8 58 fe ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1924 + (uint64_t)lim.rlim_cur, code); + lim.rlim_cur /= 2; + 4012d8: 48 8b 44 24 70 mov 0x70(%rsp),%rax + 4012dd: 48 d1 e8 shr $1,%rax + 4012e0: 48 89 44 24 70 mov %rax,0x70(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1926 + // lim.rlim_max /= 2; + if(lim.rlim_cur < 100 * 1024) { + 4012e5: 48 3d ff 8f 01 00 cmp $0x18fff,%rax + 4012eb: 0f 86 b7 02 00 00 jbe 4015a8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1920 + code = setrlimit(RLIMIT_STACK, &lim); + 4012f1: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 4012f6: bf 03 00 00 00 mov $0x3,%edi + 4012fb: e8 80 fe ff ff call 401180 + 401300: 89 c1 mov %eax,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1921 + while (code) { + 401302: 85 c0 test %eax,%eax + 401304: 75 ba jne 4012c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 +#endif + + // int got_numargs = argc; // How many numeric arguments have we got. + + int i; + for (i = 1; i < argc; ++i) + 401306: 83 fb 01 cmp $0x1,%ebx + 401309: 0f 8e b9 02 00 00 jle 4015c8 + 40130f: 48 8b 44 24 10 mov 0x10(%rsp),%rax + 401314: 8d 6b fe lea -0x2(%rbx),%ebp + 401317: 41 bd 02 00 00 00 mov $0x2,%r13d + 40131d: 41 bf 01 00 00 00 mov $0x1,%r15d + 401323: 83 e5 fe and $0xfffffffe,%ebp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + check_args(i, argc, argv, "--array-input-length"); + gib_global_arrayfile_length_param = atoll(argv[i+1]); + i++; + } + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 401326: 44 8d 63 ff lea -0x1(%rbx),%r12d + 40132a: 4c 8d 70 10 lea 0x10(%rax),%r14 + 40132e: 83 c5 03 add $0x3,%ebp + 401331: eb 42 jmp 401375 + 401333: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 401338: 45 39 fc cmp %r15d,%r12d + 40133b: 0f 8e cf 00 00 00 jle 401410 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401341: 44 39 eb cmp %r13d,%ebx + 401344: 0f 8e 35 0c 00 00 jle 401f7f +/usr/include/stdlib.h:376 + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); + 40134a: 49 8b 3e mov (%r14),%rdi + 40134d: ba 0a 00 00 00 mov $0xa,%edx + 401352: 31 f6 xor %esi,%esi + 401354: e8 c7 fd ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1945 + gib_global_biginf_init_chunk_size = atoll(argv[i + 1]); + 401359: 48 89 05 90 4d 00 00 mov %rax,0x4d90(%rip) # 4060f0 + 401360: 41 83 c7 02 add $0x2,%r15d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 + for (i = 1; i < argc; ++i) + 401364: 41 83 c5 02 add $0x2,%r13d + 401368: 49 83 c6 10 add $0x10,%r14 + 40136c: 41 39 ef cmp %ebp,%r15d + 40136f: 0f 84 53 02 00 00 je 4015c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1939 + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + 401375: 4d 8b 46 f8 mov -0x8(%r14),%r8 + 401379: 41 80 38 2d cmpb $0x2d,(%r8) + 40137d: 75 12 jne 401391 + 40137f: 41 80 78 01 68 cmpb $0x68,0x1(%r8) + 401384: 75 0b jne 401391 + 401386: 41 80 78 02 00 cmpb $0x0,0x2(%r8) + 40138b: 0f 84 83 01 00 00 je 401514 + 401391: bf ba 47 40 00 mov $0x4047ba,%edi + 401396: b9 07 00 00 00 mov $0x7,%ecx + 40139b: 4c 89 c6 mov %r8,%rsi + 40139e: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013a0: 0f 97 c0 seta %al + 4013a3: 1c 00 sbb $0x0,%al + 4013a5: 84 c0 test %al,%al + 4013a7: 0f 84 67 01 00 00 je 401514 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 4013ad: bf c1 47 40 00 mov $0x4047c1,%edi + 4013b2: b9 15 00 00 00 mov $0x15,%ecx + 4013b7: 4c 89 c6 mov %r8,%rsi + 4013ba: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013bc: 0f 97 c0 seta %al + 4013bf: 1c 00 sbb $0x0,%al + 4013c1: 84 c0 test %al,%al + 4013c3: 0f 84 6f ff ff ff je 401338 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1948 + else if (strcmp(argv[i], "--inf-buffer-size") == 0 && i < argc - 1) { + 4013c9: bf d6 47 40 00 mov $0x4047d6,%edi + 4013ce: b9 12 00 00 00 mov $0x12,%ecx + 4013d3: 4c 89 c6 mov %r8,%rsi + 4013d6: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013d8: 0f 97 c0 seta %al + 4013db: 1c 00 sbb $0x0,%al + 4013dd: 84 c0 test %al,%al + 4013df: 75 2f jne 401410 + 4013e1: 45 39 fc cmp %r15d,%r12d + 4013e4: 7e 2a jle 401410 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 4013e6: 44 39 eb cmp %r13d,%ebx + 4013e9: 0f 8e 9f 0b 00 00 jle 401f8e +/usr/include/stdlib.h:376 + 4013ef: 49 8b 3e mov (%r14),%rdi + 4013f2: ba 0a 00 00 00 mov $0xa,%edx + 4013f7: 31 f6 xor %esi,%esi + 4013f9: e8 22 fd ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1950 + gib_global_inf_init_chunk_size = atoll(argv[i + 1]); + 4013fe: 48 89 05 e3 4c 00 00 mov %rax,0x4ce3(%rip) # 4060e8 + 401405: e9 56 ff ff ff jmp 401360 + 40140a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1953 + else if ((strcmp(argv[i], "--bench-input") == 0)) { + 401410: bf e8 47 40 00 mov $0x4047e8,%edi + 401415: b9 0e 00 00 00 mov $0xe,%ecx + 40141a: 4c 89 c6 mov %r8,%rsi + 40141d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40141f: 0f 97 c0 seta %al + 401422: 1c 00 sbb $0x0,%al + 401424: 84 c0 test %al,%al + 401426: 75 18 jne 401440 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401428: 44 39 eb cmp %r13d,%ebx + 40142b: 0f 8f 2f ff ff ff jg 401360 + 401431: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401436: be e8 47 40 00 mov $0x4047e8,%esi + 40143b: e8 b0 16 00 00 call 402af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1958 + else if ((strcmp(argv[i], "--array-input") == 0)) { + 401440: bf f6 47 40 00 mov $0x4047f6,%edi + 401445: b9 0e 00 00 00 mov $0xe,%ecx + 40144a: 4c 89 c6 mov %r8,%rsi + 40144d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40144f: 0f 97 c0 seta %al + 401452: 1c 00 sbb $0x0,%al + 401454: 84 c0 test %al,%al + 401456: 75 18 jne 401470 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401458: 44 39 eb cmp %r13d,%ebx + 40145b: 0f 8f ff fe ff ff jg 401360 + 401461: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401466: be f6 47 40 00 mov $0x4047f6,%esi + 40146b: e8 80 16 00 00 call 402af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1963 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + 401470: bf 04 48 40 00 mov $0x404804,%edi + 401475: b9 15 00 00 00 mov $0x15,%ecx + 40147a: 4c 89 c6 mov %r8,%rsi + 40147d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40147f: 0f 97 c0 seta %al + 401482: 1c 00 sbb $0x0,%al + 401484: 84 c0 test %al,%al + 401486: 75 28 jne 4014b0 + 401488: 45 39 fc cmp %r15d,%r12d + 40148b: 7e 4b jle 4014d8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40148d: 44 39 eb cmp %r13d,%ebx + 401490: 0f 8e 60 0b 00 00 jle 401ff6 +/usr/include/stdlib.h:376 + 401496: 49 8b 3e mov (%r14),%rdi + 401499: ba 0a 00 00 00 mov $0xa,%edx + 40149e: 31 f6 xor %esi,%esi + 4014a0: e8 7b fc ff ff call 401120 + 4014a5: e9 b6 fe ff ff jmp 401360 + 4014aa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 4014b0: bf 19 48 40 00 mov $0x404819,%edi + 4014b5: b9 0d 00 00 00 mov $0xd,%ecx + 4014ba: 4c 89 c6 mov %r8,%rsi + 4014bd: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4014bf: 0f 97 c0 seta %al + 4014c2: 1c 00 sbb $0x0,%al + 4014c4: 84 c0 test %al,%al + 4014c6: 75 10 jne 4014d8 + 4014c8: 45 39 fc cmp %r15d,%r12d + 4014cb: 0f 8f 8d 00 00 00 jg 40155e + 4014d1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1975 + int len = strlen(argv[i+1]); + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + strncpy(gib_global_bench_prog_param,argv[i+1],len); + i++; + } + else if ((strcmp(argv[i], "--iterate") == 0)) { + 4014d8: bf 26 48 40 00 mov $0x404826,%edi + 4014dd: b9 0a 00 00 00 mov $0xa,%ecx + 4014e2: 4c 89 c6 mov %r8,%rsi + 4014e5: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4014e7: 0f 97 c0 seta %al + 4014ea: 1c 00 sbb $0x0,%al + 4014ec: 84 c0 test %al,%al + 4014ee: 75 35 jne 401525 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 4014f0: 44 39 eb cmp %r13d,%ebx + 4014f3: 0f 8e 8f 0b 00 00 jle 402088 +/usr/include/stdlib.h:376 + 4014f9: 49 8b 3e mov (%r14),%rdi + 4014fc: ba 0a 00 00 00 mov $0xa,%edx + 401501: 31 f6 xor %esi,%esi + 401503: e8 18 fc ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1977 + check_args(i, argc, argv, "--iterate"); + gib_global_iters_param = atoll(argv[i+1]); + 401508: 48 89 05 e9 4b 00 00 mov %rax,0x4be9(%rip) # 4060f8 + 40150f: e9 4c fe ff ff jmp 401360 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1940 + gib_show_usage(argv); + 401514: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401519: e8 12 15 00 00 call 402a30 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1941 + exit(0); + 40151e: 31 ff xor %edi,%edi + 401520: e8 8b fc ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1980 + i++; + } + else if ((strcmp(argv[i], "--size-param") == 0)) { + 401525: be 30 48 40 00 mov $0x404830,%esi + 40152a: 4c 89 c7 mov %r8,%rdi + 40152d: e8 de fb ff ff call 401110 + 401532: 85 c0 test %eax,%eax + 401534: 0f 85 da 0a 00 00 jne 402014 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40153a: 44 39 eb cmp %r13d,%ebx + 40153d: 0f 8e c2 0a 00 00 jle 402005 +/usr/include/stdlib.h:376 + 401543: 49 8b 3e mov (%r14),%rdi + 401546: ba 0a 00 00 00 mov $0xa,%edx + 40154b: 31 f6 xor %esi,%esi + 40154d: e8 ce fb ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1982 + check_args(i, argc, argv, "--size-param"); + gib_global_size_param = atoll(argv[i+1]); + 401552: 48 89 05 a7 4b 00 00 mov %rax,0x4ba7(%rip) # 406100 + 401559: e9 02 fe ff ff jmp 401360 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40155e: 44 39 eb cmp %r13d,%ebx + 401561: 0f 8e 06 0b 00 00 jle 40206d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1970 + int len = strlen(argv[i+1]); + 401567: 49 8b 36 mov (%r14),%rsi + 40156a: 48 89 f7 mov %rsi,%rdi + 40156d: 48 89 74 24 28 mov %rsi,0x28(%rsp) + 401572: e8 39 fb ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 401577: 8d 78 01 lea 0x1(%rax),%edi + 40157a: 48 89 44 24 20 mov %rax,0x20(%rsp) + 40157f: 48 63 ff movslq %edi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401582: e8 d9 fb ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 401587: 48 8b 54 24 20 mov 0x20(%rsp),%rdx + 40158c: 48 8b 74 24 28 mov 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401591: 48 89 c7 mov %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 401594: 48 89 05 ed 4b 00 00 mov %rax,0x4bed(%rip) # 406188 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 40159b: 48 63 d2 movslq %edx,%rdx + 40159e: e8 ad fa ff ff call 401050 + 4015a3: e9 b8 fd ff ff jmp 401360 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1927 + fprintf(stderr, " [gibbon rts] Failed setrlimit stack size to something reasonable; giving up.\n"); + 4015a8: ba 4e 00 00 00 mov $0x4e,%edx + 4015ad: be 01 00 00 00 mov $0x1,%esi + 4015b2: bf f0 45 40 00 mov $0x4045f0,%edi + 4015b7: 48 8b 0d 82 4b 00 00 mov 0x4b82(%rip),%rcx # 406140 + 4015be: e8 fd fb ff ff call 4011c0 + 4015c3: e9 3e fd ff ff jmp 401306 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1996 + } + } + + // Initialize gib_global_bench_prog_param to an empty string in case + // the runtime argument --bench-prog isn't passed. + if (gib_global_bench_prog_param == NULL) { + 4015c8: 48 83 3d b8 4b 00 00 cmpq $0x0,0x4bb8(%rip) # 406188 + 4015cf: 00 + 4015d0: 0f 84 45 09 00 00 je 401f1b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2007 +#ifdef _GIBBON_PARALLEL + gib_global_num_threads = __cilkrts_get_nworkers(); +#endif + +#if defined _GIBBON_VERBOSITY && _GIBBON_VERBOSITY >= 2 + printf("Number of threads: %ld\n", gib_global_num_threads); + 4015d6: be 01 00 00 00 mov $0x1,%esi + 4015db: bf 5d 48 40 00 mov $0x40485d,%edi + 4015e0: 31 c0 xor %eax,%eax + 4015e2: e8 d9 fa ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015e7: bf f0 00 00 00 mov $0xf0,%edi + 4015ec: e8 6f fb ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 4015f1: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 4015f5: 66 0f ef c9 pxor %xmm1,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015f9: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1587 + stats->gc_zct_mgmt_time = 0; + 4015fe: 48 c7 80 b0 00 00 00 movq $0x0,0xb0(%rax) + 401605: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1594 + stats->rootset_size = 0; + 401609: 48 c7 80 e8 00 00 00 movq $0x0,0xe8(%rax) + 401610: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401614: 0f 11 00 movups %xmm0,(%rax) + 401617: 0f 11 40 10 movups %xmm0,0x10(%rax) + 40161b: 0f 11 40 20 movups %xmm0,0x20(%rax) + 40161f: 0f 11 40 30 movups %xmm0,0x30(%rax) + 401623: 0f 11 40 40 movups %xmm0,0x40(%rax) + 401627: 0f 11 40 50 movups %xmm0,0x50(%rax) + 40162b: 0f 11 40 60 movups %xmm0,0x60(%rax) + 40162f: 0f 11 40 70 movups %xmm0,0x70(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401633: 0f 11 88 80 00 00 00 movups %xmm1,0x80(%rax) + 40163a: 0f 11 88 90 00 00 00 movups %xmm1,0x90(%rax) + 401641: 0f 11 88 a0 00 00 00 movups %xmm1,0xa0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1588 + stats->fwd_env_size = 0; + 401648: 0f 11 80 b8 00 00 00 movups %xmm0,0xb8(%rax) + 40164f: 0f 11 80 c8 00 00 00 movups %xmm0,0xc8(%rax) + 401656: 0f 11 80 d8 00 00 00 movups %xmm0,0xd8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1338 + gib_global_gc_stats = (GibGcStats *) gib_alloc(sizeof(GibGcStats)); + 40165d: 48 89 05 fc 4a 00 00 mov %rax,0x4afc(%rip) # 406160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401664: e8 f7 fa ff ff call 401160 + 401669: bf 00 00 40 00 mov $0x400000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1420 + nursery->heap_size = nsize; + 40166e: 48 c7 00 00 00 40 00 movq $0x400000,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401675: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1343 + gib_global_nurseries = (GibNursery *) gib_alloc(gib_global_num_threads * + 401678: 48 89 05 01 4b 00 00 mov %rax,0x4b01(%rip) # 406180 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40167f: e8 dc fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1421 + nursery->heap_start = (char *) gib_alloc(nsize); + 401684: 48 89 43 08 mov %rax,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401688: 48 89 c6 mov %rax,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1422 + if (nursery->heap_start == NULL) { + 40168b: 48 85 c0 test %rax,%rax + 40168e: 0f 84 56 09 00 00 je 401fea +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 401694: 48 8d 90 00 00 40 00 lea 0x400000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 40169b: 41 b8 00 00 40 00 mov $0x400000,%r8d + 4016a1: bf 70 46 40 00 mov $0x404670,%edi + 4016a6: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4016a8: 48 89 53 10 mov %rdx,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 4016ac: 48 89 d1 mov %rdx,%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1428 + nursery->alloc = nursery->heap_end; + 4016af: 48 89 53 18 mov %rdx,0x18(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 4016b3: e8 08 fa ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016b8: bf 18 00 00 00 mov $0x18,%edi + 4016bd: e8 9e fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4016c2: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016c6: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4016cb: 0f 11 40 08 movups %xmm0,0x8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016cf: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1350 + gib_global_oldgen = (GibOldgen *) gib_alloc(sizeof(GibOldgen)); + 4016d2: 48 89 05 8f 4a 00 00 mov %rax,0x4a8f(%rip) # 406168 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016d9: e8 82 fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1457 + oldgen->rem_set = (GibRememberedSet *) gib_alloc(sizeof(GibRememberedSet)); + 4016de: 48 89 45 00 mov %rax,0x0(%rbp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016e2: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1458 + if (oldgen->rem_set == NULL) { + 4016e5: 48 85 c0 test %rax,%rax + 4016e8: 0f 84 f0 08 00 00 je 401fde +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016ee: bf 00 00 00 06 mov $0x6000000,%edi + 4016f3: e8 68 fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 4016f8: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 4016fb: 48 85 c0 test %rax,%rax + 4016fe: 0f 84 56 08 00 00 je 401f5a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401704: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 40170b: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40170f: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401714: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401718: e8 43 fa ff ff call 401160 + 40171d: bf 18 00 00 00 mov $0x18,%edi + 401722: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1355 + gib_global_read_shadowstacks = + 401725: 48 89 05 4c 4a 00 00 mov %rax,0x4a4c(%rip) # 406178 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40172c: e8 2f fa ff ff call 401160 + 401731: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1358 + gib_global_write_shadowstacks = + 401736: 48 89 05 33 4a 00 00 mov %rax,0x4a33(%rip) # 406170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40173d: 48 89 c3 mov %rax,%rbx + 401740: e8 1b fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401745: 49 89 04 24 mov %rax,(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401749: 48 85 c0 test %rax,%rax + 40174c: 0f 84 08 08 00 00 je 401f5a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401752: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401759: 49 89 44 24 10 mov %rax,0x10(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40175e: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401763: 49 89 54 24 08 mov %rdx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401768: e8 f3 f9 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 40176d: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401770: 48 85 c0 test %rax,%rax + 401773: 0f 84 e1 07 00 00 je 401f5a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401779: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401780: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + +#ifndef _GIBBON_POINTER + // Initialize the nursery and shadow stack. + gib_storage_initialize(); + GibOldgen *oldgen = DEFAULT_GENERATION; + gib_init_zcts(oldgen); + 401784: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401787: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + gib_init_zcts(oldgen); + 40178b: e8 e0 f8 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2017 + + // Minimal test to see if FFI is set up correctly. + gib_check_rust_struct_sizes(); + 401790: e8 2b 17 00 00 call 402ec0 +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:87 + int error = gib_info_table_initialize(7); + 401795: bf 07 00 00 00 mov $0x7,%edi + 40179a: e8 51 f9 ff ff call 4010f0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:89 + if (error < 0) { + 40179f: 85 c0 test %eax,%eax + 4017a1: 0f 88 18 08 00 00 js 401fbf +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:96 + gib_info_table_finalize(); + 4017a7: e8 f4 f9 ff ff call 4011a0 +symbol_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:100 + gib_add_symbol(1236, "]"); + 4017ac: be 19 47 40 00 mov $0x404719,%esi + 4017b1: bf d4 04 00 00 mov $0x4d4,%edi + 4017b6: 41 bc 00 00 00 00 mov $0x0,%r12d + 4017bc: e8 5f 13 00 00 call 402b20 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:101 + gib_add_symbol(1237, "["); + 4017c1: be 0f 47 40 00 mov $0x40470f,%esi + 4017c6: bf d5 04 00 00 mov $0x4d5,%edi + 4017cb: e8 50 13 00 00 call 402b20 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:102 + gib_add_symbol(1238, ","); + 4017d0: be 75 48 40 00 mov $0x404875,%esi + 4017d5: bf d6 04 00 00 mov $0x4d6,%edi + 4017da: e8 41 13 00 00 call 402b20 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:78 + return gib_global_size_param; + 4017df: 4c 8b 2d 1a 49 00 00 mov 0x491a(%rip),%r13 # 406100 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:108 + if (fltIf_1019_1066) { + 4017e6: 4d 85 ed test %r13,%r13 + 4017e9: 4d 0f 49 e5 cmovns %r13,%r12 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:415 + + GibInt n_42_859_1054 = gib_get_size_param(); + GibInt n_100_892_961_1055 = gib_get_size_param(); + GibInt n__103_894_963_1057 = maxInt(n_100_892_961_1055, 0); + GibInt tmp_19 = sizeof(GibInt); + GibVector *vec_104_895_964_1058 = gib_vector_alloc(n__103_894_963_1057, + 4017ed: 4c 89 e7 mov %r12,%rdi + 4017f0: e8 cb 10 00 00 call 4028c0 + 4017f5: 48 89 c5 mov %rax,%rbp +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 4017f8: 4d 85 ed test %r13,%r13 + 4017fb: 7e 13 jle 401810 + 4017fd: 4c 89 e9 mov %r13,%rcx + 401800: 4c 89 e2 mov %r12,%rdx + 401803: 31 f6 xor %esi,%esi + 401805: 48 89 c7 mov %rax,%rdi + 401808: e8 63 0b 00 00 call 402370 + 40180d: 48 89 c5 mov %rax,%rbp +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:420 + tmp_19); + GibVector *vec1_105_896_965_1059 = + generate_loop_544_803(vec_104_895_964_1058, 0, n__103_894_963_1057, n_42_859_1054); + GibVector *timed_1232; + GibVector *times_12 = gib_vector_alloc(gib_get_iters_param(), + 401810: 48 8b 3d e1 48 00 00 mov 0x48e1(%rip),%rdi # 4060f8 + 401817: e8 a4 10 00 00 call 4028c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + sizeof(double)); + struct timespec begin_timed_1232; + struct timespec end_timed_1232; + + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 40181c: 48 83 3d d4 48 00 00 cmpq $0x0,0x48d4(%rip) # 4060f8 + 401823: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:420 + GibVector *times_12 = gib_vector_alloc(gib_get_iters_param(), + 401824: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 401827: 0f 8e dc 01 00 00 jle 401a09 + 40182d: 45 31 ed xor %r13d,%r13d + 401830: e9 ad 00 00 00 jmp 4018e2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401835: 48 8b 45 00 mov 0x0(%rbp),%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 401839: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 40183d: 4c 89 f7 mov %r14,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401840: 4c 01 f8 add %r15,%rax + 401843: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 401848: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 40184c: 4c 89 fa mov %r15,%rdx + 40184f: e8 5c 0a 00 00 call 4022b0 + 401854: 48 89 44 24 18 mov %rax,0x18(%rsp) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:436 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1232); + + GibVector *tailapp_1229 = isort1_533_796(vec1_105_896_965_1059); + + timed_1232 = tailapp_1229; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_1232); + 401859: 48 8d 74 24 60 lea 0x60(%rsp),%rsi + 40185e: bf 04 00 00 00 mov $0x4,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401863: 4c 8d 7c 24 50 lea 0x50(%rsp),%r15 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:436 + 401868: e8 33 f8 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40186d: 48 8b 44 24 68 mov 0x68(%rsp),%rax + 401872: 66 0f ef c0 pxor %xmm0,%xmm0 + 401876: 48 2b 44 24 78 sub 0x78(%rsp),%rax + 40187b: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 401880: 66 0f ef c9 pxor %xmm1,%xmm1 + 401884: 48 8b 44 24 60 mov 0x60(%rsp),%rax + 401889: 48 2b 44 24 70 sub 0x70(%rsp),%rax + 40188e: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:445 + } + + double itertime_9 = gib_difftimespecs(&begin_timed_1232, + &end_timed_1232); + + printf("itertime: %lf\n", itertime_9); + 401893: bf 77 48 40 00 mov $0x404877,%edi + 401898: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40189d: f2 0f 5e 05 53 30 00 divsd 0x3053(%rip),%xmm0 # 4048f8 <__PRETTY_FUNCTION__.3+0x28> + 4018a4: 00 + 4018a5: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:442 + double itertime_9 = gib_difftimespecs(&begin_timed_1232, + 4018a9: f2 0f 11 44 24 50 movsd %xmm0,0x50(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:445 + printf("itertime: %lf\n", itertime_9); + 4018af: e8 0c f8 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018b4: 49 8b 3c 24 mov (%r12),%rdi + 4018b8: 49 8b 54 24 10 mov 0x10(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018bd: 4c 89 fe mov %r15,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018c0: 4c 01 ef add %r13,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:426 + gib_get_iters_param(); iters_timed_1232++) { + 4018c3: 49 83 c5 01 add $0x1,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4018c7: 48 0f af fa imul %rdx,%rdi + 4018cb: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018d0: e8 6b f8 ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 4018d5: 4c 3b 2d 1c 48 00 00 cmp 0x481c(%rip),%r13 # 4060f8 + 4018dc: 0f 8d 27 01 00 00 jge 401a09 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:431 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1232); + 4018e2: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 4018e7: bf 04 00 00 00 mov $0x4,%edi + 4018ec: 41 bf 00 00 00 00 mov $0x0,%r15d + 4018f2: e8 a9 f7 ff ff call 4010a0 +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:195 + GibInt n_56_931_1109 = gib_vector_length(xs_54_930_1107); + 4018f7: 48 8b 45 00 mov 0x0(%rbp),%rax +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018fb: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4018ff: bf 20 00 00 00 mov $0x20,%edi +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:200 + GibInt hd_57_932_1112 = *tmp_3; + 401904: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401908: 48 0f af d0 imul %rax,%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:200 + 40190c: 48 8b 1c 11 mov (%rcx,%rdx,1),%rbx + 401910: 48 89 5c 24 10 mov %rbx,0x10(%rsp) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:108 + if (fltIf_1019_1066) { + 401915: 48 8b 5d 08 mov 0x8(%rbp),%rbx + 401919: 48 29 c3 sub %rax,%rbx + 40191c: 4c 0f 49 fb cmovns %rbx,%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401920: e8 3b f8 ff ff call 401160 + 401925: 49 89 c6 mov %rax,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 401928: 48 85 c0 test %rax,%rax + 40192b: 0f 84 6c 06 00 00 je 401f9d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 401931: 4a 8d 3c fd 00 00 00 lea 0x0(,%r15,8),%rdi + 401938: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401939: e8 22 f8 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 40193e: 48 85 c0 test %rax,%rax + 401941: 0f 84 18 06 00 00 je 401f5f +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 401947: 49 c7 06 00 00 00 00 movq $0x0,(%r14) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 40194e: 4d 89 7e 08 mov %r15,0x8(%r14) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 401952: 49 c7 46 10 08 00 00 movq $0x8,0x10(%r14) + 401959: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 40195a: 49 89 46 18 mov %rax,0x18(%r14) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 40195e: 48 85 db test %rbx,%rbx + 401961: 7e 4d jle 4019b0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401963: 48 8b 54 24 10 mov 0x10(%rsp),%rdx + 401968: 48 89 10 mov %rdx,(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 40196b: 48 83 fb 01 cmp $0x1,%rbx + 40196f: 74 3f je 4019b0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 401971: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 401975: 48 83 fb 02 cmp $0x2,%rbx + 401979: 74 35 je 4019b0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 40197b: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 40197f: 48 83 fb 03 cmp $0x3,%rbx + 401983: 74 2b je 4019b0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 401985: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 401989: 48 83 fb 04 cmp $0x4,%rbx + 40198d: 74 21 je 4019b0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 40198f: 48 89 50 20 mov %rdx,0x20(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 401993: 48 89 d1 mov %rdx,%rcx + 401996: 4c 89 f7 mov %r14,%rdi + 401999: 4c 89 fa mov %r15,%rdx + 40199c: be 05 00 00 00 mov $0x5,%esi + 4019a1: e8 0a 08 00 00 call 4021b0 + 4019a6: 49 89 c6 mov %rax,%r14 + 4019a9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4019b0: 48 8b 55 08 mov 0x8(%rbp),%rdx + 4019b4: 48 2b 55 00 sub 0x0(%rbp),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 4019b8: 48 89 6c 24 18 mov %rbp,0x18(%rsp) + 4019bd: 48 83 fa 01 cmp $0x1,%rdx + 4019c1: 0f 8e 92 fe ff ff jle 401859 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4019c7: 48 89 d3 mov %rdx,%rbx +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:208 + GibInt fltAppE_1029_1121 = fltPrm_1030_1120 - 1; + 4019ca: 4c 8d 7a ff lea -0x1(%rdx),%r15 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4019ce: 48 83 eb 02 sub $0x2,%rbx + 4019d2: 0f 84 5d fe ff ff je 401835 + 4019d8: 48 83 ea 03 sub $0x3,%rdx + 4019dc: 0f 85 52 05 00 00 jne 401f34 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4019e2: 48 8b 45 00 mov 0x0(%rbp),%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 4019e6: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 4019ea: 4c 89 f7 mov %r14,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4019ed: 48 01 d8 add %rbx,%rax + 4019f0: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 4019f5: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 4019f9: 48 89 da mov %rbx,%rdx + 4019fc: e8 af 08 00 00 call 4022b0 + 401a01: 49 89 c6 mov %rax,%r14 + 401a04: e9 2c fe ff ff jmp 401835 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401a09: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401a0e: 49 8b 3c 24 mov (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401a12: b9 90 21 40 00 mov $0x402190,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401a17: 49 8b 74 24 08 mov 0x8(%r12),%rsi + 401a1c: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a1f: 48 0f af fa imul %rdx,%rdi + 401a23: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401a28: e8 63 f6 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:450 + gib_vector_inplace_update(times_12, iters_timed_1232, &itertime_9); + } + gib_vector_inplace_sort(times_12, gib_compare_doubles); + + double *tmp_13 = (double *) gib_vector_nth(times_12, gib_get_iters_param() / + 401a2d: 48 8b 05 c4 46 00 00 mov 0x46c4(%rip),%rax # 4060f8 + 401a34: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a3a: 49 8b 3c 24 mov (%r12),%rdi + 401a3e: 49 8b 74 24 10 mov 0x10(%r12),%rsi + 401a43: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:450 + 401a48: 48 99 cqto + 401a4a: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401a4d: 49 8b 54 24 08 mov 0x8(%r12),%rdx + 401a52: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a55: 48 01 f8 add %rdi,%rax + 401a58: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:452 + 2); + double selftimed_11 = *tmp_13; + 401a5c: f2 0f 10 0c 01 movsd (%rcx,%rax,1),%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a61: 48 85 d2 test %rdx,%rdx + 401a64: 0f 8e dd 04 00 00 jle 401f47 + 401a6a: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401a6e: 66 0f ef d2 pxor %xmm2,%xmm2 + 401a72: f2 0f 11 54 24 20 movsd %xmm2,0x20(%rsp) + 401a78: 66 0f 28 c2 movapd %xmm2,%xmm0 + 401a7c: 48 8d 04 39 lea (%rcx,%rdi,1),%rax + 401a80: 89 d1 mov %edx,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a82: 31 d2 xor %edx,%edx + 401a84: 0f 1f 40 00 nopl 0x0(%rax) + 401a88: 83 c2 01 add $0x1,%edx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401a8b: f2 0f 58 00 addsd (%rax),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a8f: 48 01 f0 add %rsi,%rax + 401a92: 39 ca cmp %ecx,%edx + 401a94: 75 f2 jne 401a88 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:455 + double batchtime_10 = gib_sum_timing_array(times_12); + + gib_print_timing_array(times_12); + 401a96: 4c 89 e7 mov %r12,%rdi + 401a99: f2 0f 11 4c 24 10 movsd %xmm1,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + GibVector *times_17 = gib_vector_alloc(gib_get_iters_param(), + sizeof(double)); + struct timespec begin_timed_1233; + struct timespec end_timed_1233; + + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401a9f: 31 db xor %ebx,%ebx + 401aa1: 4c 8d 7c 24 50 lea 0x50(%rsp),%r15 + 401aa6: f2 0f 11 44 24 28 movsd %xmm0,0x28(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:455 + gib_print_timing_array(times_12); + 401aac: e8 df 0e 00 00 call 402990 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401ab1: 49 8b 7c 24 18 mov 0x18(%r12),%rdi + 401ab6: e8 75 f5 ff ff call 401030 + 401abb: 4c 89 e7 mov %r12,%rdi + 401abe: e8 6d f5 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:457 + printf("ITERS: %ld\n", gib_get_iters_param()); + 401ac3: 48 8b 35 2e 46 00 00 mov 0x462e(%rip),%rsi # 4060f8 + 401aca: bf 86 48 40 00 mov $0x404886,%edi + 401acf: 31 c0 xor %eax,%eax + 401ad1: e8 ea f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:458 + printf("SIZE: %ld\n", gib_get_size_param()); + 401ad6: 48 8b 35 23 46 00 00 mov 0x4623(%rip),%rsi # 406100 + 401add: bf 92 48 40 00 mov $0x404892,%edi + 401ae2: 31 c0 xor %eax,%eax + 401ae4: e8 d7 f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:459 + printf("BATCHTIME: %e\n", batchtime_10); + 401ae9: f2 0f 10 44 24 28 movsd 0x28(%rsp),%xmm0 + 401aef: bf 9d 48 40 00 mov $0x40489d,%edi + 401af4: b8 01 00 00 00 mov $0x1,%eax + 401af9: e8 c2 f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:460 + printf("SELFTIMED: %e\n", selftimed_11); + 401afe: f2 0f 10 4c 24 10 movsd 0x10(%rsp),%xmm1 + 401b04: bf ac 48 40 00 mov $0x4048ac,%edi + 401b09: b8 01 00 00 00 mov $0x1,%eax + 401b0e: 66 0f 28 c1 movapd %xmm1,%xmm0 + 401b12: e8 a9 f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:463 + GibVector *times_17 = gib_vector_alloc(gib_get_iters_param(), + 401b17: 48 8b 3d da 45 00 00 mov 0x45da(%rip),%rdi # 4060f8 + 401b1e: e8 9d 0d 00 00 call 4028c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401b23: 48 83 3d cd 45 00 00 cmpq $0x0,0x45cd(%rip) # 4060f8 + 401b2a: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:463 + GibVector *times_17 = gib_vector_alloc(gib_get_iters_param(), + 401b2b: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401b2e: 0f 8f f8 00 00 00 jg 401c2c + 401b34: e9 2d 02 00 00 jmp 401d66 + 401b39: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 401b40: 4c 89 f6 mov %r14,%rsi + 401b43: bf 01 00 00 00 mov $0x1,%edi + 401b48: e8 c3 0b 00 00 call 402710 + 401b4d: bf 02 00 00 00 mov $0x2,%edi + 401b52: 48 89 c6 mov %rax,%rsi + 401b55: e8 b6 0b 00 00 call 402710 + 401b5a: 48 89 c6 mov %rax,%rsi + 401b5d: bf 03 00 00 00 mov $0x3,%edi + 401b62: e8 a9 0b 00 00 call 402710 + 401b67: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 401b6a: 49 83 fc 04 cmp $0x4,%r12 + 401b6e: 74 38 je 401ba8 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 401b70: bf 04 00 00 00 mov $0x4,%edi + 401b75: e8 96 0b 00 00 call 402710 + 401b7a: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 401b7d: 49 83 fc 05 cmp $0x5,%r12 + 401b81: 74 25 je 401ba8 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 401b83: bf 05 00 00 00 mov $0x5,%edi + 401b88: e8 83 0b 00 00 call 402710 + 401b8d: 48 89 c2 mov %rax,%rdx +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 401b90: 49 83 fc 06 cmp $0x6,%r12 + 401b94: 74 12 je 401ba8 + 401b96: 4c 89 e6 mov %r12,%rsi + 401b99: bf 06 00 00 00 mov $0x6,%edi + 401b9e: e8 0d 0c 00 00 call 4027b0 + 401ba3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:479 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1233); + + GibVector *tailapp_1230 = isort2_534_797(vec1_105_896_965_1059); + + timed_1233 = tailapp_1230; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_1233); + 401ba8: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401bad: bf 04 00 00 00 mov $0x4,%edi + 401bb2: e8 e9 f4 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 401bb7: 48 8b 44 24 48 mov 0x48(%rsp),%rax + 401bbc: 66 0f ef c0 pxor %xmm0,%xmm0 + 401bc0: 48 2b 44 24 58 sub 0x58(%rsp),%rax + 401bc5: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 401bca: 66 0f ef c9 pxor %xmm1,%xmm1 + 401bce: 48 8b 44 24 40 mov 0x40(%rsp),%rax + 401bd3: 48 2b 44 24 50 sub 0x50(%rsp),%rax + 401bd8: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:488 + } + + double itertime_14 = gib_difftimespecs(&begin_timed_1233, + &end_timed_1233); + + printf("itertime: %lf\n", itertime_14); + 401bdd: bf 77 48 40 00 mov $0x404877,%edi + 401be2: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 401be7: f2 0f 5e 05 09 2d 00 divsd 0x2d09(%rip),%xmm0 # 4048f8 <__PRETTY_FUNCTION__.3+0x28> + 401bee: 00 + 401bef: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:485 + double itertime_14 = gib_difftimespecs(&begin_timed_1233, + 401bf3: f2 0f 11 44 24 38 movsd %xmm0,0x38(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:488 + printf("itertime: %lf\n", itertime_14); + 401bf9: e8 c2 f4 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401bfe: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401c02: 49 8b 55 10 mov 0x10(%r13),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401c06: 48 8d 74 24 38 lea 0x38(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401c0b: 48 01 df add %rbx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:469 + gib_get_iters_param(); iters_timed_1233++) { + 401c0e: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401c12: 48 0f af fa imul %rdx,%rdi + 401c16: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401c1a: e8 21 f5 ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401c1f: 48 3b 1d d2 44 00 00 cmp 0x44d2(%rip),%rbx # 4060f8 + 401c26: 0f 8d 3a 01 00 00 jge 401d66 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:474 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1233); + 401c2c: 4c 89 fe mov %r15,%rsi + 401c2f: bf 04 00 00 00 mov $0x4,%edi + 401c34: e8 67 f4 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401c39: 4c 8b 65 08 mov 0x8(%rbp),%r12 + 401c3d: b8 00 00 00 00 mov $0x0,%eax + 401c42: 4c 2b 65 00 sub 0x0(%rbp),%r12 + 401c46: 49 0f 49 c4 cmovns %r12,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401c4a: bf 20 00 00 00 mov $0x20,%edi + 401c4f: 48 89 44 24 10 mov %rax,0x10(%rsp) + 401c54: e8 07 f5 ff ff call 401160 + 401c59: 49 89 c6 mov %rax,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 401c5c: 48 85 c0 test %rax,%rax + 401c5f: 0f 84 38 03 00 00 je 401f9d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 401c65: 48 8b 44 24 10 mov 0x10(%rsp),%rax + 401c6a: 48 8d 3c c5 00 00 00 lea 0x0(,%rax,8),%rdi + 401c71: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401c72: e8 e9 f4 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 401c77: 48 85 c0 test %rax,%rax + 401c7a: 0f 84 df 02 00 00 je 401f5f +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 401c80: 48 8b 74 24 10 mov 0x10(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 401c85: 49 c7 06 00 00 00 00 movq $0x0,(%r14) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 401c8c: 49 c7 46 10 08 00 00 movq $0x8,0x10(%r14) + 401c93: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 401c94: 49 89 76 08 mov %rsi,0x8(%r14) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 401c98: 49 89 46 18 mov %rax,0x18(%r14) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401c9c: 4d 85 e4 test %r12,%r12 + 401c9f: 0f 8e 9b fe ff ff jle 401b40 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ca5: 48 8b 55 10 mov 0x10(%rbp),%rdx + 401ca9: 48 0f af 55 00 imul 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401cae: 48 8b 4d 18 mov 0x18(%rbp),%rcx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401cb2: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401cb6: 48 89 10 mov %rdx,(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401cb9: 49 83 fc 01 cmp $0x1,%r12 + 401cbd: 0f 84 e5 fe ff ff je 401ba8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401cc3: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401cc7: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401ccb: 48 83 c2 01 add $0x1,%rdx + 401ccf: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401cd4: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401cd8: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401cdc: 49 83 fc 02 cmp $0x2,%r12 + 401ce0: 0f 84 23 02 00 00 je 401f09 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ce6: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401cea: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401cee: 48 83 c2 02 add $0x2,%rdx + 401cf2: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401cf7: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401cfb: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401cff: 49 83 fc 03 cmp $0x3,%r12 + 401d03: 74 35 je 401d3a +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d05: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401d09: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401d0d: 48 83 c2 03 add $0x3,%rdx + 401d11: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401d16: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401d1a: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401d1e: 49 83 fc 04 cmp $0x4,%r12 + 401d22: 74 16 je 401d3a + 401d24: 48 89 f2 mov %rsi,%rdx + 401d27: 4c 89 f7 mov %r14,%rdi + 401d2a: 48 89 e9 mov %rbp,%rcx + 401d2d: be 04 00 00 00 mov $0x4,%esi + 401d32: e8 49 07 00 00 call 402480 + 401d37: 49 89 c6 mov %rax,%r14 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 401d3a: 4c 89 f6 mov %r14,%rsi + 401d3d: bf 01 00 00 00 mov $0x1,%edi + 401d42: e8 c9 09 00 00 call 402710 + 401d47: bf 02 00 00 00 mov $0x2,%edi + 401d4c: 48 89 c6 mov %rax,%rsi + 401d4f: e8 bc 09 00 00 call 402710 + 401d54: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 401d57: 49 83 fc 03 cmp $0x3,%r12 + 401d5b: 0f 84 47 fe ff ff je 401ba8 + 401d61: e9 f7 fd ff ff jmp 401b5d +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d66: 49 8b 55 10 mov 0x10(%r13),%rdx + 401d6a: 49 8b 7d 00 mov 0x0(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401d6e: b9 90 21 40 00 mov $0x402190,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401d73: 49 8b 75 08 mov 0x8(%r13),%rsi + 401d77: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d7a: 48 0f af fa imul %rdx,%rdi + 401d7e: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401d82: e8 09 f3 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:493 + gib_vector_inplace_update(times_17, iters_timed_1233, &itertime_14); + } + gib_vector_inplace_sort(times_17, gib_compare_doubles); + + double *tmp_18 = (double *) gib_vector_nth(times_17, gib_get_iters_param() / + 401d87: 48 8b 05 6a 43 00 00 mov 0x436a(%rip),%rax # 4060f8 + 401d8e: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d94: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401d98: 49 8b 75 10 mov 0x10(%r13),%rsi + 401d9c: 49 8b 4d 18 mov 0x18(%r13),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401da0: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:493 + 401da4: 48 99 cqto + 401da6: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401da9: 49 8b 55 08 mov 0x8(%r13),%rdx + 401dad: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401db0: 48 01 f8 add %rdi,%rax + 401db3: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:495 + 2); + double selftimed_16 = *tmp_18; + 401db7: f2 0f 10 0c 01 movsd (%rcx,%rax,1),%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401dbc: 48 85 d2 test %rdx,%rdx + 401dbf: 7e 23 jle 401de4 + 401dc1: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401dc5: 66 0f ef c0 pxor %xmm0,%xmm0 + 401dc9: 48 8d 04 39 lea (%rcx,%rdi,1),%rax + 401dcd: 0f 1f 00 nopl (%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401dd0: 83 44 24 08 01 addl $0x1,0x8(%rsp) + 401dd5: 8b 5c 24 08 mov 0x8(%rsp),%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401dd9: f2 0f 58 00 addsd (%rax),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401ddd: 48 01 f0 add %rsi,%rax + 401de0: 39 d3 cmp %edx,%ebx + 401de2: 75 ec jne 401dd0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:498 + double batchtime_15 = gib_sum_timing_array(times_17); + + gib_print_timing_array(times_17); + 401de4: 4c 89 ef mov %r13,%rdi + 401de7: f2 0f 11 4c 24 08 movsd %xmm1,0x8(%rsp) + 401ded: f2 0f 11 44 24 10 movsd %xmm0,0x10(%rsp) + 401df3: e8 98 0b 00 00 call 402990 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401df8: 49 8b 7d 18 mov 0x18(%r13),%rdi + 401dfc: e8 2f f2 ff ff call 401030 + 401e01: 4c 89 ef mov %r13,%rdi + 401e04: e8 27 f2 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:500 + gib_vector_free(times_17); + printf("ITERS: %ld\n", gib_get_iters_param()); + 401e09: 48 8b 35 e8 42 00 00 mov 0x42e8(%rip),%rsi # 4060f8 + 401e10: bf 86 48 40 00 mov $0x404886,%edi + 401e15: 31 c0 xor %eax,%eax + 401e17: e8 a4 f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:501 + printf("SIZE: %ld\n", gib_get_size_param()); + 401e1c: 48 8b 35 dd 42 00 00 mov 0x42dd(%rip),%rsi # 406100 + 401e23: bf 92 48 40 00 mov $0x404892,%edi + 401e28: 31 c0 xor %eax,%eax + 401e2a: e8 91 f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:502 + printf("BATCHTIME: %e\n", batchtime_15); + 401e2f: f2 0f 10 44 24 10 movsd 0x10(%rsp),%xmm0 + 401e35: bf 9d 48 40 00 mov $0x40489d,%edi + 401e3a: b8 01 00 00 00 mov $0x1,%eax + 401e3f: e8 7c f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:503 + printf("SELFTIMED: %e\n", selftimed_16); + 401e44: f2 0f 10 4c 24 08 movsd 0x8(%rsp),%xmm1 + 401e4a: bf ac 48 40 00 mov $0x4048ac,%edi + 401e4f: b8 01 00 00 00 mov $0x1,%eax + 401e54: 66 0f 28 c1 movapd %xmm1,%xmm0 + 401e58: e8 63 f2 ff ff call 4010c0 +printVec_535_799(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:116 + unsigned char wildcard__178_109_900_1070 = gib_print_symbol(1237); + 401e5d: bf d5 04 00 00 mov $0x4d5,%edi + 401e62: e8 89 11 00 00 call 402ff0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401e67: 48 8b 54 24 18 mov 0x18(%rsp),%rdx + 401e6c: 48 8b 72 08 mov 0x8(%rdx),%rsi +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 401e70: 48 2b 32 sub (%rdx),%rsi + 401e73: 74 07 je 401e7c + 401e75: 31 ff xor %edi,%edi + 401e77: e8 04 13 00 00 call 403180 +printVec_535_799(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:120 + unsigned char wildcard__173_111_902_1073 = gib_print_symbol(1236); + 401e7c: bf d4 04 00 00 mov $0x4d4,%edi + 401e81: e8 6a 11 00 00 call 402ff0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:507 + + unsigned char wildcard__33_48_863_1063 = printVec_535_799(timed_1232); + + printf("'#("); + 401e86: bf bb 48 40 00 mov $0x4048bb,%edi + 401e8b: 31 c0 xor %eax,%eax + 401e8d: e8 2e f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:508 + printf(""); + 401e92: bf bf 48 40 00 mov $0x4048bf,%edi + 401e97: 31 c0 xor %eax,%eax + 401e99: e8 22 f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:509 + printf(" "); + 401e9e: bf 20 00 00 00 mov $0x20,%edi + 401ea3: e8 98 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:510 + printf(""); + 401ea8: bf bf 48 40 00 mov $0x4048bf,%edi + 401ead: 31 c0 xor %eax,%eax + 401eaf: e8 0c f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:511 + printf(")"); + 401eb4: bf 29 00 00 00 mov $0x29,%edi + 401eb9: e8 82 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:512 + printf("\n"); + 401ebe: bf 0a 00 00 00 mov $0xa,%edi + 401ec3: e8 78 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401ec8: 48 8b 3d b9 42 00 00 mov 0x42b9(%rip),%rdi # 406188 + 401ecf: e8 5c f1 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2042 + GibShadowstack *rstack = DEFAULT_READ_SHADOWSTACK; + GibShadowstack *wstack = DEFAULT_WRITE_SHADOWSTACK; + GibOldgen *oldgen = DEFAULT_GENERATION; + + // Free all objects initialized by the Rust RTS. + gib_gc_cleanup(rstack, wstack, nursery, oldgen); + 401ed4: 48 8b 0d 8d 42 00 00 mov 0x428d(%rip),%rcx # 406168 + 401edb: 48 8b 15 9e 42 00 00 mov 0x429e(%rip),%rdx # 406180 + 401ee2: 48 8b 35 87 42 00 00 mov 0x4287(%rip),%rsi # 406170 + 401ee9: 48 8b 3d 88 42 00 00 mov 0x4288(%rip),%rdi # 406178 + 401ef0: e8 db f1 ff ff call 4010d0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:517 + + int exit_21 = gib_exit(); + + return exit_21; + 401ef5: 48 81 c4 88 00 00 00 add $0x88,%rsp + 401efc: 31 c0 xor %eax,%eax + 401efe: 5b pop %rbx + 401eff: 5d pop %rbp + 401f00: 41 5c pop %r12 + 401f02: 41 5d pop %r13 + 401f04: 41 5e pop %r14 + 401f06: 41 5f pop %r15 + 401f08: c3 ret +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 401f09: 4c 89 f6 mov %r14,%rsi + 401f0c: bf 01 00 00 00 mov $0x1,%edi + 401f11: e8 fa 07 00 00 call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 + 401f16: e9 8d fc ff ff jmp 401ba8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401f1b: bf 01 00 00 00 mov $0x1,%edi + 401f20: e8 3b f2 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1997 + gib_global_bench_prog_param = (char*) gib_alloc(1*sizeof(char)); + 401f25: 48 89 05 5c 42 00 00 mov %rax,0x425c(%rip) # 406188 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + *gib_global_bench_prog_param = '\n'; + 401f2c: c6 00 0a movb $0xa,(%rax) + 401f2f: e9 a2 f6 ff ff jmp 4015d6 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + 401f34: 4c 89 f6 mov %r14,%rsi + 401f37: 48 89 ef mov %rbp,%rdi + 401f3a: e8 81 06 00 00 call 4025c0 + 401f3f: 49 89 c6 mov %rax,%r14 + 401f42: e9 9b fa ff ff jmp 4019e2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401f47: 66 0f ef db pxor %xmm3,%xmm3 + 401f4b: f2 0f 11 5c 24 20 movsd %xmm3,0x20(%rsp) + 401f51: 66 0f 28 c3 movapd %xmm3,%xmm0 + 401f55: e9 3c fb ff ff jmp 401a96 + 401f5a: e8 01 0a 00 00 call 402960 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 401f5f: 48 8b 3d da 41 00 00 mov 0x41da(%rip),%rdi # 406140 + 401f66: ba 08 00 00 00 mov $0x8,%edx + 401f6b: be 08 40 40 00 mov $0x404008,%esi + 401f70: e8 bb f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 401f75: bf 01 00 00 00 mov $0x1,%edi + 401f7a: e8 31 f2 ff ff call 4011b0 + 401f7f: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401f84: be c1 47 40 00 mov $0x4047c1,%esi + 401f89: e8 62 0b 00 00 call 402af0 + 401f8e: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401f93: be d6 47 40 00 mov $0x4047d6,%esi + 401f98: e8 53 0b 00 00 call 402af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 401f9d: ba 20 00 00 00 mov $0x20,%edx + 401fa2: be 08 40 40 00 mov $0x404008,%esi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 401fa7: 48 8b 3d 92 41 00 00 mov 0x4192(%rip),%rdi # 406140 + 401fae: 31 c0 xor %eax,%eax + 401fb0: e8 7b f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1461 + exit(1); + 401fb5: bf 01 00 00 00 mov $0x1,%edi + 401fba: e8 f1 f1 ff ff call 4011b0 +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:90 + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + 401fbf: 89 c2 mov %eax,%edx + 401fc1: be d8 46 40 00 mov $0x4046d8,%esi + 401fc6: 48 8b 3d 73 41 00 00 mov 0x4173(%rip),%rdi # 406140 + 401fcd: 31 c0 xor %eax,%eax + 401fcf: e8 5c f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:91 + exit(1); + 401fd4: bf 01 00 00 00 mov $0x1,%edi + 401fd9: e8 d2 f1 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 401fde: ba 18 00 00 00 mov $0x18,%edx + 401fe3: be a8 46 40 00 mov $0x4046a8,%esi + 401fe8: eb bd jmp 401fa7 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1423 + fprintf(stderr, "gib_nursery_initialize: gib_alloc failed: %zu", + 401fea: ba 00 00 40 00 mov $0x400000,%edx + 401fef: be 40 46 40 00 mov $0x404640,%esi + 401ff4: eb b1 jmp 401fa7 + 401ff6: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 401ffb: be 04 48 40 00 mov $0x404804,%esi + 402000: e8 eb 0a 00 00 call 402af0 + 402005: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 40200a: be 30 48 40 00 mov $0x404830,%esi + 40200f: e8 dc 0a 00 00 call 402af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1987 + fprintf(stderr, "Extra arguments left over: "); + 402014: 48 8b 0d 25 41 00 00 mov 0x4125(%rip),%rcx # 406140 + 40201b: ba 1b 00 00 00 mov $0x1b,%edx + 402020: be 01 00 00 00 mov $0x1,%esi + 402025: 4d 63 ff movslq %r15d,%r15 + 402028: bf 3d 48 40 00 mov $0x40483d,%edi + 40202d: e8 8e f1 ff ff call 4011c0 + 402032: eb 20 jmp 402054 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1988 + for(; i < argc; i++) fprintf(stderr, "%s ", argv[i]); + 402034: 48 8b 44 24 10 mov 0x10(%rsp),%rax + 402039: 48 8b 3d 00 41 00 00 mov 0x4100(%rip),%rdi # 406140 + 402040: be 59 48 40 00 mov $0x404859,%esi + 402045: 4a 8b 14 f8 mov (%rax,%r15,8),%rdx + 402049: 31 c0 xor %eax,%eax + 40204b: 49 83 c7 01 add $0x1,%r15 + 40204f: e8 dc f0 ff ff call 401130 + 402054: 44 39 fb cmp %r15d,%ebx + 402057: 7f db jg 402034 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1989 + gib_show_usage(argv); + 402059: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 40205e: e8 cd 09 00 00 call 402a30 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1990 + exit(1); + 402063: bf 01 00 00 00 mov $0x1,%edi + 402068: e8 43 f1 ff ff call 4011b0 + 40206d: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 402072: be 19 48 40 00 mov $0x404819,%esi + 402077: e8 74 0a 00 00 call 402af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1910 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + 40207c: 89 c2 mov %eax,%edx + 40207e: be 88 45 40 00 mov $0x404588,%esi + 402083: e9 3e ff ff ff jmp 401fc6 + 402088: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi + 40208d: be 26 48 40 00 mov $0x404826,%esi + 402092: e8 59 0a 00 00 call 402af0 + 402097: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 40209e: 00 00 + +00000000004020a0 <_start>: +_start(): + 4020a0: f3 0f 1e fa endbr64 + 4020a4: 31 ed xor %ebp,%ebp + 4020a6: 49 89 d1 mov %rdx,%r9 + 4020a9: 5e pop %rsi + 4020aa: 48 89 e2 mov %rsp,%rdx + 4020ad: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 4020b1: 50 push %rax + 4020b2: 54 push %rsp + 4020b3: 45 31 c0 xor %r8d,%r8d + 4020b6: 31 c9 xor %ecx,%ecx + 4020b8: 48 c7 c7 e0 11 40 00 mov $0x4011e0,%rdi + 4020bf: ff 15 13 3f 00 00 call *0x3f13(%rip) # 405fd8 <__libc_start_main@GLIBC_2.34> + 4020c5: f4 hlt + 4020c6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4020cd: 00 00 00 + +00000000004020d0 <_dl_relocate_static_pie>: +_dl_relocate_static_pie(): + 4020d0: f3 0f 1e fa endbr64 + 4020d4: c3 ret + 4020d5: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4020dc: 00 00 00 + 4020df: 90 nop + +00000000004020e0 : +deregister_tm_clones(): + 4020e0: b8 08 61 40 00 mov $0x406108,%eax + 4020e5: 48 3d 08 61 40 00 cmp $0x406108,%rax + 4020eb: 74 13 je 402100 + 4020ed: b8 00 00 00 00 mov $0x0,%eax + 4020f2: 48 85 c0 test %rax,%rax + 4020f5: 74 09 je 402100 + 4020f7: bf 08 61 40 00 mov $0x406108,%edi + 4020fc: ff e0 jmp *%rax + 4020fe: 66 90 xchg %ax,%ax + 402100: c3 ret + 402101: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402108: 00 00 00 00 + 40210c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402110 : +register_tm_clones(): + 402110: be 08 61 40 00 mov $0x406108,%esi + 402115: 48 81 ee 08 61 40 00 sub $0x406108,%rsi + 40211c: 48 89 f0 mov %rsi,%rax + 40211f: 48 c1 ee 3f shr $0x3f,%rsi + 402123: 48 c1 f8 03 sar $0x3,%rax + 402127: 48 01 c6 add %rax,%rsi + 40212a: 48 d1 fe sar $1,%rsi + 40212d: 74 11 je 402140 + 40212f: b8 00 00 00 00 mov $0x0,%eax + 402134: 48 85 c0 test %rax,%rax + 402137: 74 07 je 402140 + 402139: bf 08 61 40 00 mov $0x406108,%edi + 40213e: ff e0 jmp *%rax + 402140: c3 ret + 402141: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402148: 00 00 00 00 + 40214c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402150 <__do_global_dtors_aux>: +__do_global_dtors_aux(): + 402150: 80 3d f1 3f 00 00 00 cmpb $0x0,0x3ff1(%rip) # 406148 + 402157: 75 17 jne 402170 <__do_global_dtors_aux+0x20> + 402159: 55 push %rbp + 40215a: 48 89 e5 mov %rsp,%rbp + 40215d: e8 7e ff ff ff call 4020e0 + 402162: c6 05 df 3f 00 00 01 movb $0x1,0x3fdf(%rip) # 406148 + 402169: 5d pop %rbp + 40216a: c3 ret + 40216b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + 402170: c3 ret + 402171: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402178: 00 00 00 00 + 40217c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402180 : +frame_dummy(): + 402180: eb 8e jmp 402110 + 402182: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 402189: 00 00 00 + 40218c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402190 : +gib_compare_doubles(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1835 + return (*da > *db) - (*da < *db); + 402190: f2 0f 10 07 movsd (%rdi),%xmm0 + 402194: f2 0f 10 0e movsd (%rsi),%xmm1 + 402198: 31 c0 xor %eax,%eax + 40219a: 66 0f 2f c1 comisd %xmm1,%xmm0 + 40219e: 0f 97 c0 seta %al + 4021a1: 31 d2 xor %edx,%edx + 4021a3: 66 0f 2f c8 comisd %xmm0,%xmm1 + 4021a7: 0f 97 c2 seta %dl + 4021aa: 29 d0 sub %edx,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1836 +} + 4021ac: c3 ret + 4021ad: 0f 1f 00 nopl (%rax) + +00000000004021b0 : +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:217 +{ + 4021b0: 41 56 push %r14 + 4021b2: 41 55 push %r13 + 4021b4: 41 54 push %r12 + 4021b6: 49 89 fc mov %rdi,%r12 + 4021b9: 53 push %rbx + 4021ba: 48 83 ec 38 sub $0x38,%rsp + 4021be: 48 89 4c 24 08 mov %rcx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 4021c3: 48 39 d6 cmp %rdx,%rsi + 4021c6: 75 18 jne 4021e0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:232 +} + 4021c8: 48 83 c4 38 add $0x38,%rsp + 4021cc: 4c 89 e0 mov %r12,%rax + 4021cf: 5b pop %rbx + 4021d0: 41 5c pop %r12 + 4021d2: 41 5d pop %r13 + 4021d4: 41 5e pop %r14 + 4021d6: c3 ret + 4021d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 4021de: 00 00 + 4021e0: 49 89 d5 mov %rdx,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021e3: 48 8b 57 10 mov 0x10(%rdi),%rdx + 4021e7: 48 8b 3f mov (%rdi),%rdi + 4021ea: 48 89 f3 mov %rsi,%rbx + 4021ed: 48 01 f7 add %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021f0: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021f5: 48 0f af fa imul %rdx,%rdi + 4021f9: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021fe: e8 3d ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 402203: 4c 8b 74 24 08 mov 0x8(%rsp),%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 402208: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:227 + GibVector *tailapp_1221 = + 40220c: 4c 89 74 24 18 mov %r14,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 402211: 49 39 fd cmp %rdi,%r13 + 402214: 74 b2 je 4021c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402216: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 40221b: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40221f: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402224: 48 0f af fa imul %rdx,%rdi + 402228: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40222d: e8 0e ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 402232: 48 8d 7b 02 lea 0x2(%rbx),%rdi + 402236: 4c 89 74 24 20 mov %r14,0x20(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 40223b: 49 39 fd cmp %rdi,%r13 + 40223e: 74 88 je 4021c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402240: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402245: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402249: 48 8d 74 24 20 lea 0x20(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40224e: 48 0f af fa imul %rdx,%rdi + 402252: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402257: e8 e4 ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 40225c: 48 8d 7b 03 lea 0x3(%rbx),%rdi + 402260: 4c 89 74 24 28 mov %r14,0x28(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 402265: 49 39 fd cmp %rdi,%r13 + 402268: 0f 84 5a ff ff ff je 4021c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40226e: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402273: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402277: 48 8d 74 24 28 lea 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40227c: 48 0f af fa imul %rdx,%rdi + 402280: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402285: e8 b6 ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 40228a: 4c 89 e7 mov %r12,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 40228d: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 402291: 4c 89 f1 mov %r14,%rcx + 402294: 4c 89 ea mov %r13,%rdx + 402297: e8 14 ff ff ff call 4021b0 + 40229c: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:230 + return tailapp_1221; + 40229f: e9 24 ff ff ff jmp 4021c8 + 4022a4: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4022ab: 00 00 00 00 + 4022af: 90 nop + +00000000004022b0 : +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:264 +{ + 4022b0: 41 55 push %r13 + 4022b2: 41 54 push %r12 + 4022b4: 55 push %rbp + 4022b5: 48 89 fd mov %rdi,%rbp + 4022b8: 48 83 ec 20 sub $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4022bc: 48 8b 7f 18 mov 0x18(%rdi),%rdi + 4022c0: 4c 8b 45 10 mov 0x10(%rbp),%r8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:264 + 4022c4: 48 89 74 24 08 mov %rsi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4022c9: 48 8b 45 00 mov 0x0(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:267 + if (fltIf_1038_1147) { + 4022cd: 48 85 d2 test %rdx,%rdx + 4022d0: 74 6e je 402340 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:273 + GibInt i_98_883_996_1152 = n_70_946_1146 - 1; + 4022d2: 4c 8d 62 ff lea -0x1(%rdx),%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4022d6: 48 01 c2 add %rax,%rdx + 4022d9: 49 89 f5 mov %rsi,%r13 + 4022dc: 49 0f af d0 imul %r8,%rdx + 4022e0: 49 8d 0c 04 lea (%r12,%rax,1),%rcx + 4022e4: 49 0f af c8 imul %r8,%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + GibInt y_72_947_1153 = *tmp_5; + 4022e8: 48 8b 0c 0f mov (%rdi,%rcx,1),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4022ec: 48 01 d7 add %rdx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4022ef: 4c 89 c2 mov %r8,%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + 4022f2: 48 89 4c 24 18 mov %rcx,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:282 + if (fltIf_1041_1156) { + 4022f7: 48 39 f1 cmp %rsi,%rcx + 4022fa: 7f 1c jg 402318 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 4022fc: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 402301: e8 3a ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 +} + 402306: 48 83 c4 20 add $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 40230a: 48 89 e8 mov %rbp,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 40230d: 5d pop %rbp + 40230e: 41 5c pop %r12 + 402310: 41 5d pop %r13 + 402312: c3 ret + 402313: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 402318: 48 8d 74 24 18 lea 0x18(%rsp),%rsi + 40231d: e8 1e ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 402322: 4c 89 e2 mov %r12,%rdx + 402325: 4c 89 ee mov %r13,%rsi + 402328: 48 89 ef mov %rbp,%rdi + 40232b: e8 80 ff ff ff call 4022b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 +} + 402330: 48 83 c4 20 add $0x20,%rsp + 402334: 5d pop %rbp + 402335: 41 5c pop %r12 + 402337: 41 5d pop %r13 + 402339: c3 ret + 40233a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402340: 49 0f af c0 imul %r8,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402344: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 402349: 4c 89 c2 mov %r8,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40234c: 48 01 c7 add %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40234f: e8 ec ed ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 402354: 48 83 c4 20 add $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 402358: 48 89 e8 mov %rbp,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 40235b: 5d pop %rbp + 40235c: 41 5c pop %r12 + 40235e: 41 5d pop %r13 + 402360: c3 ret + 402361: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402368: 00 00 00 00 + 40236c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402370 : +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:148 +GibVector *generate_loop_544_803(GibVector *vec_254_913_1087, + 402370: 41 56 push %r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402372: 48 89 c8 mov %rcx,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:148 +GibVector *generate_loop_544_803(GibVector *vec_254_913_1087, + 402375: 49 89 ce mov %rcx,%r14 + 402378: 41 55 push %r13 + 40237a: 49 89 d5 mov %rdx,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 40237d: 48 29 f0 sub %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:148 +GibVector *generate_loop_544_803(GibVector *vec_254_913_1087, + 402380: 41 54 push %r12 + 402382: 49 89 fc mov %rdi,%r12 + 402385: 53 push %rbx + 402386: 48 89 f3 mov %rsi,%rbx + 402389: 48 83 ec 28 sub $0x28,%rsp +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40238d: 48 8b 57 10 mov 0x10(%rdi),%rdx + 402391: 48 8b 3f mov (%rdi),%rdi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402394: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402398: 48 01 f7 add %rsi,%rdi +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40239b: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40239e: 48 0f af fa imul %rdx,%rdi + 4023a2: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023a7: e8 94 ed ff ff call 401140 +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 4023ac: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 4023b0: 4c 39 ef cmp %r13,%rdi + 4023b3: 75 13 jne 4023c8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:167 +} + 4023b5: 48 83 c4 28 add $0x28,%rsp + 4023b9: 4c 89 e0 mov %r12,%rax + 4023bc: 5b pop %rbx + 4023bd: 41 5c pop %r12 + 4023bf: 41 5d pop %r13 + 4023c1: 41 5e pop %r14 + 4023c3: c3 ret + 4023c4: 0f 1f 40 00 nopl 0x0(%rax) +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023c8: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 4023cd: 4c 89 f0 mov %r14,%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023d0: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 4023d5: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023d8: 49 03 3c 24 add (%r12),%rdi + 4023dc: 48 0f af fa imul %rdx,%rdi + 4023e0: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 4023e5: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023ea: e8 51 ed ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 4023ef: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 4023f3: 49 39 fd cmp %rdi,%r13 + 4023f6: 74 bd je 4023b5 +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023f8: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 4023fd: 4c 89 f0 mov %r14,%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402400: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402405: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402408: 49 03 3c 24 add (%r12),%rdi + 40240c: 48 0f af fa imul %rdx,%rdi + 402410: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402415: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40241a: e8 21 ed ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 40241f: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 402423: 49 39 fd cmp %rdi,%r13 + 402426: 74 8d je 4023b5 +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402428: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 40242d: 4c 89 f0 mov %r14,%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402430: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402435: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402438: 49 03 3c 24 add (%r12),%rdi + 40243c: 48 0f af fa imul %rdx,%rdi + 402440: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402445: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40244a: e8 f1 ec ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 40244f: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 402453: 49 39 f5 cmp %rsi,%r13 + 402456: 0f 84 59 ff ff ff je 4023b5 + 40245c: 4c 89 e7 mov %r12,%rdi + 40245f: 4c 89 f1 mov %r14,%rcx + 402462: 4c 89 ea mov %r13,%rdx + 402465: e8 06 ff ff ff call 402370 + 40246a: 49 89 c4 mov %rax,%r12 + 40246d: e9 43 ff ff ff jmp 4023b5 +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + 402472: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402479: 00 00 00 00 + 40247d: 0f 1f 00 nopl (%rax) + +0000000000402480 : +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:168 +GibVector *generate_loop_544_804(GibVector *vec_254_918_1097, + 402480: 41 56 push %r14 + 402482: 49 89 d6 mov %rdx,%r14 + 402485: 41 55 push %r13 + 402487: 49 89 cd mov %rcx,%r13 + 40248a: 41 54 push %r12 + 40248c: 49 89 fc mov %rdi,%r12 + 40248f: 53 push %rbx + 402490: 48 89 f3 mov %rsi,%rbx + 402493: 48 83 ec 28 sub $0x28,%rsp +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402497: 48 8b 01 mov (%rcx),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 40249a: 48 8b 51 18 mov 0x18(%rcx),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40249e: 48 01 f0 add %rsi,%rax + 4024a1: 48 0f af 41 10 imul 0x10(%rcx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 4024a6: 48 8b 04 02 mov (%rdx,%rax,1),%rax +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4024aa: 48 8b 57 10 mov 0x10(%rdi),%rdx + 4024ae: 48 8b 3f mov (%rdi),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 4024b1: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4024b5: 48 01 f7 add %rsi,%rdi +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024b8: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024bb: 48 0f af fa imul %rdx,%rdi + 4024bf: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024c4: e8 77 ec ff ff call 401140 +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 4024c9: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 4024cd: 4c 39 f7 cmp %r14,%rdi + 4024d0: 75 16 jne 4024e8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:192 +} + 4024d2: 48 83 c4 28 add $0x28,%rsp + 4024d6: 4c 89 e0 mov %r12,%rax + 4024d9: 5b pop %rbx + 4024da: 41 5c pop %r12 + 4024dc: 41 5d pop %r13 + 4024de: 41 5e pop %r14 + 4024e0: c3 ret + 4024e1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024e8: 49 8b 45 00 mov 0x0(%r13),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 4024ec: 49 8b 55 18 mov 0x18(%r13),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024f0: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024f5: 48 01 f8 add %rdi,%rax + 4024f8: 49 0f af 45 10 imul 0x10(%r13),%rax + 4024fd: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402501: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402505: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 40250a: 48 0f af fa imul %rdx,%rdi + 40250e: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402513: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402518: e8 23 ec ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 40251d: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 402521: 49 39 fe cmp %rdi,%r14 + 402524: 74 ac je 4024d2 +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402526: 49 8b 45 00 mov 0x0(%r13),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 40252a: 49 8b 55 18 mov 0x18(%r13),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40252e: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402533: 48 01 f8 add %rdi,%rax + 402536: 49 0f af 45 10 imul 0x10(%r13),%rax + 40253b: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 40253f: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402543: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402548: 48 0f af fa imul %rdx,%rdi + 40254c: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402551: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402556: e8 e5 eb ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 40255b: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 40255f: 49 39 fe cmp %rdi,%r14 + 402562: 0f 84 6a ff ff ff je 4024d2 +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402568: 49 8b 45 00 mov 0x0(%r13),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 40256c: 49 8b 55 18 mov 0x18(%r13),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402570: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402575: 48 01 f8 add %rdi,%rax + 402578: 49 0f af 45 10 imul 0x10(%r13),%rax + 40257d: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402581: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402585: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 40258a: 48 0f af fa imul %rdx,%rdi + 40258e: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402593: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402598: e8 a3 eb ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 40259d: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 4025a1: 49 39 f6 cmp %rsi,%r14 + 4025a4: 0f 84 28 ff ff ff je 4024d2 + 4025aa: 4c 89 e7 mov %r12,%rdi + 4025ad: 4c 89 e9 mov %r13,%rcx + 4025b0: 4c 89 f2 mov %r14,%rdx + 4025b3: e8 c8 fe ff ff call 402480 + 4025b8: 49 89 c4 mov %rax,%r12 + 4025bb: e9 12 ff ff ff jmp 4024d2 + +00000000004025c0 : +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:233 +GibVector *isort_540_807(GibVector *xs_61_939_1132, GibVector *b_62_940_1133, + 4025c0: 41 57 push %r15 + 4025c2: 41 56 push %r14 + 4025c4: 41 55 push %r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:247 + GibInt fltAppE_1036_1139 = n_63_941_1134 - 1; + 4025c6: 4c 8d 6a ff lea -0x1(%rdx),%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:233 +GibVector *isort_540_807(GibVector *xs_61_939_1132, GibVector *b_62_940_1133, + 4025ca: 41 54 push %r12 + 4025cc: 49 89 d4 mov %rdx,%r12 + 4025cf: 53 push %rbx + 4025d0: 48 89 fb mov %rdi,%rbx + 4025d3: 48 83 ec 10 sub $0x10,%rsp + 4025d7: 48 8b 17 mov (%rdi),%rdx +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4025da: 48 8b 47 08 mov 0x8(%rdi),%rax + 4025de: 48 29 d0 sub %rdx,%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 4025e1: 48 83 f8 01 cmp $0x1,%rax + 4025e5: 0f 8e f5 00 00 00 jle 4026e0 + 4025eb: 49 89 f6 mov %rsi,%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4025ee: 4d 85 ed test %r13,%r13 + 4025f1: 75 75 jne 402668 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4025f3: 48 83 c2 01 add $0x1,%rdx + 4025f7: 48 0f af 57 10 imul 0x10(%rdi),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 4025fc: 48 8b 47 18 mov 0x18(%rdi),%rax +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402600: 48 8b 4e 18 mov 0x18(%rsi),%rcx + 402604: 48 8b 3e mov (%rsi),%rdi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + 402607: 4c 8b 3c 10 mov (%rax,%rdx,1),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40260b: 48 8b 56 10 mov 0x10(%rsi),%rdx + 40260f: 4c 89 3c 24 mov %r15,(%rsp) + 402613: 49 8d 44 3d 00 lea 0x0(%r13,%rdi,1),%rax +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402618: 4c 01 e7 add %r12,%rdi + 40261b: 48 0f af c2 imul %rdx,%rax + 40261f: 48 0f af fa imul %rdx,%rdi +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + GibInt y_72_947_1153 = *tmp_5; + 402623: 48 8b 04 01 mov (%rcx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402627: 48 01 cf add %rcx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + 40262a: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:282 + if (fltIf_1041_1156) { + 40262f: 4c 39 f8 cmp %r15,%rax + 402632: 0f 8e 98 00 00 00 jle 4026d0 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402638: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 40263d: e8 fe ea ff ff call 401140 +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 402642: 4c 89 f7 mov %r14,%rdi + 402645: 4c 89 ea mov %r13,%rdx + 402648: 4c 89 fe mov %r15,%rsi + 40264b: e8 60 fc ff ff call 4022b0 + 402650: 49 89 c6 mov %rax,%r14 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:261 +} + 402653: 48 83 c4 10 add $0x10,%rsp + 402657: 4c 89 f0 mov %r14,%rax + 40265a: 5b pop %rbx + 40265b: 41 5c pop %r12 + 40265d: 41 5d pop %r13 + 40265f: 41 5e pop %r14 + 402661: 41 5f pop %r15 + 402663: c3 ret + 402664: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 402668: 4d 89 e0 mov %r12,%r8 + 40266b: 49 83 e8 02 sub $0x2,%r8 + 40266f: 75 7f jne 4026f0 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402671: 4c 01 ea add %r13,%rdx + 402674: 48 0f af 53 10 imul 0x10(%rbx),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 402679: 48 8b 43 18 mov 0x18(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 40267d: 4c 89 f7 mov %r14,%rdi + 402680: 48 8b 34 10 mov (%rax,%rdx,1),%rsi + 402684: 4c 89 ea mov %r13,%rdx + 402687: e8 24 fc ff ff call 4022b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40268c: 48 8b 13 mov (%rbx),%rdx +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40268f: 48 8b 38 mov (%rax),%rdi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 402692: 49 89 c6 mov %rax,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402695: 4c 01 e2 add %r12,%rdx + 402698: 48 0f af 53 10 imul 0x10(%rbx),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 40269d: 48 8b 43 18 mov 0x18(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026a1: 49 8b 4e 18 mov 0x18(%r14),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + 4026a5: 4c 8b 3c 10 mov (%rax,%rdx,1),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026a9: 49 8b 56 10 mov 0x10(%r14),%rdx + 4026ad: 4c 89 3c 24 mov %r15,(%rsp) +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:267 + if (fltIf_1038_1147) { + 4026b1: 4d 85 e4 test %r12,%r12 + 4026b4: 0f 85 59 ff ff ff jne 402613 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026ba: 48 0f af fa imul %rdx,%rdi +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4026be: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4026c1: 48 01 cf add %rcx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4026c4: e8 77 ea ff ff call 401140 + 4026c9: eb 88 jmp 402653 + 4026cb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + 4026d0: 48 89 e6 mov %rsp,%rsi + 4026d3: e8 68 ea ff ff call 401140 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:258 + return tailapp_1222; + 4026d8: e9 76 ff ff ff jmp 402653 + 4026dd: 0f 1f 00 nopl (%rax) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 4026e0: 48 89 d7 mov %rdx,%rdi + 4026e3: 49 89 de mov %rbx,%r14 + 4026e6: eb ad jmp 402695 + 4026e8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) + 4026ef: 00 + 4026f0: 4c 89 c2 mov %r8,%rdx + 4026f3: e8 c8 fe ff ff call 4025c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4026f8: 48 8b 13 mov (%rbx),%rdx + 4026fb: 49 89 c6 mov %rax,%r14 + 4026fe: e9 6e ff ff ff jmp 402671 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402703: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 40270a: 00 00 00 00 + 40270e: 66 90 xchg %ax,%ax + +0000000000402710 : +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:348 +GibVector *shift_543_811(GibInt j_74_955_1180, GibVector *ys_76_956_1181) + 402710: 41 54 push %r12 + 402712: 49 89 fc mov %rdi,%r12 + 402715: 55 push %rbp + 402716: 48 89 f5 mov %rsi,%rbp +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:360 + GibInt i_98_883_1010_1187 = j_74_955_1180 - 1; + 402719: 49 83 ec 01 sub $0x1,%r12 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:348 +GibVector *shift_543_811(GibInt j_74_955_1180, GibVector *ys_76_956_1181) + 40271d: 48 83 ec 18 sub $0x18,%rsp +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402721: 48 8b 45 00 mov 0x0(%rbp),%rax + 402725: 48 8b 55 10 mov 0x10(%rbp),%rdx + 402729: 48 8b 76 18 mov 0x18(%rsi),%rsi + 40272d: 48 01 c7 add %rax,%rdi + 402730: 4c 01 e0 add %r12,%rax + 402733: 48 0f af fa imul %rdx,%rdi + 402737: 48 0f af c2 imul %rdx,%rax + 40273b: 48 01 f7 add %rsi,%rdi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:359 + GibInt a_78_957_1185 = *tmp_8; + 40273e: 48 8b 0f mov (%rdi),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:365 + GibInt b_79_958_1188 = *tmp_7; + 402741: 48 8b 04 06 mov (%rsi,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:359 + GibInt a_78_957_1185 = *tmp_8; + 402745: 48 89 4c 24 08 mov %rcx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:365 + GibInt b_79_958_1188 = *tmp_7; + 40274a: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:376 + if (fltIf_1052_1192) { + 40274e: 48 39 c1 cmp %rax,%rcx + 402751: 7f 2a jg 40277d +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402753: 48 89 e6 mov %rsp,%rsi + 402756: e8 e5 e9 ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40275b: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 40275f: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402763: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402768: 4c 01 e7 add %r12,%rdi + 40276b: 48 0f af fa imul %rdx,%rdi + 40276f: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402773: e8 c8 e9 ff ff call 401140 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 402778: 4d 85 e4 test %r12,%r12 + 40277b: 75 13 jne 402790 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:403 +} + 40277d: 48 83 c4 18 add $0x18,%rsp +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:348 +GibVector *shift_543_811(GibInt j_74_955_1180, GibVector *ys_76_956_1181) + 402781: 48 89 e8 mov %rbp,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:403 +} + 402784: 5d pop %rbp + 402785: 41 5c pop %r12 + 402787: c3 ret + 402788: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) + 40278f: 00 + 402790: 48 89 ee mov %rbp,%rsi + 402793: 4c 89 e7 mov %r12,%rdi + 402796: e8 75 ff ff ff call 402710 + 40279b: 48 83 c4 18 add $0x18,%rsp + 40279f: 5d pop %rbp + 4027a0: 41 5c pop %r12 + 4027a2: c3 ret +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:403 + 4027a3: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4027aa: 00 00 00 00 + 4027ae: 66 90 xchg %ax,%ax + +00000000004027b0 : +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:331 +GibVector *go_538_810(GibInt i_82_951_1174, GibInt n_83_952_1175, + 4027b0: 41 54 push %r12 + 4027b2: 55 push %rbp + 4027b3: 48 89 f5 mov %rsi,%rbp + 4027b6: 48 89 d6 mov %rdx,%rsi + 4027b9: 53 push %rbx + 4027ba: 48 89 fb mov %rdi,%rbx +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 4027bd: 48 85 ff test %rdi,%rdi + 4027c0: 75 1e jne 4027e0 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 4027c2: 48 83 fd 01 cmp $0x1,%rbp + 4027c6: 74 13 je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 4027c8: bf 01 00 00 00 mov $0x1,%edi + 4027cd: e8 3e ff ff ff call 402710 + 4027d2: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 4027d5: 48 83 fd 02 cmp $0x2,%rbp + 4027d9: 75 4e jne 402829 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:347 +} + 4027db: 5b pop %rbx + 4027dc: 5d pop %rbp + 4027dd: 41 5c pop %r12 + 4027df: c3 ret + 4027e0: 4c 8d 67 01 lea 0x1(%rdi),%r12 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:347 + 4027e4: e8 27 ff ff ff call 402710 + 4027e9: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 4027ec: 4c 39 e5 cmp %r12,%rbp + 4027ef: 74 ea je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 4027f1: 4d 85 e4 test %r12,%r12 + 4027f4: 75 7b jne 402871 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 4027f6: 48 83 fd 01 cmp $0x1,%rbp + 4027fa: 74 df je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 4027fc: bf 01 00 00 00 mov $0x1,%edi + 402801: e8 0a ff ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 402806: 48 83 fd 02 cmp $0x2,%rbp + 40280a: 74 cf je 4027db + 40280c: bf 02 00 00 00 mov $0x2,%edi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 402811: 48 89 c6 mov %rax,%rsi + 402814: e8 f7 fe ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 402819: 48 8d 7b 04 lea 0x4(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 40281d: 48 39 fd cmp %rdi,%rbp + 402820: 74 b9 je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 402822: 48 85 ff test %rdi,%rdi + 402825: 74 2d je 402854 + 402827: eb 23 jmp 40284c +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 402829: bf 02 00 00 00 mov $0x2,%edi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 40282e: e8 dd fe ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 402833: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 402837: 48 39 fd cmp %rdi,%rbp + 40283a: 74 9f je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 40283c: 48 85 ff test %rdi,%rdi + 40283f: 75 d0 jne 402811 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 402841: bf 01 00 00 00 mov $0x1,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 402846: 48 83 fd 01 cmp $0x1,%rbp + 40284a: 74 8f je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 40284c: 48 89 c6 mov %rax,%rsi + 40284f: e8 bc fe ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 402854: 48 8d 7b 05 lea 0x5(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 402858: 48 39 fd cmp %rdi,%rbp + 40285b: 0f 84 7a ff ff ff je 4027db + 402861: 48 89 ee mov %rbp,%rsi + 402864: 48 89 c2 mov %rax,%rdx + 402867: e8 44 ff ff ff call 4027b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:347 +} + 40286c: 5b pop %rbx + 40286d: 5d pop %rbp + 40286e: 41 5c pop %r12 + 402870: c3 ret +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:347 + 402871: 4c 89 e7 mov %r12,%rdi + 402874: e8 97 fe ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 402879: 48 8d 7b 02 lea 0x2(%rbx),%rdi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + 40287d: 48 89 c6 mov %rax,%rsi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 402880: 48 39 fd cmp %rdi,%rbp + 402883: 0f 84 52 ff ff ff je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 402889: 48 85 ff test %rdi,%rdi + 40288c: 75 a0 jne 40282e +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 40288e: 48 83 fd 01 cmp $0x1,%rbp + 402892: 0f 84 43 ff ff ff je 4027db +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 402898: bf 01 00 00 00 mov $0x1,%edi + 40289d: e8 6e fe ff ff call 402710 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 4028a2: 48 83 fd 02 cmp $0x2,%rbp + 4028a6: 0f 84 2f ff ff ff je 4027db + 4028ac: bf 02 00 00 00 mov $0x2,%edi + 4028b1: eb 99 jmp 40284c +go_538_810.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + 4028b3: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4028ba: 00 00 00 00 + 4028be: 66 90 xchg %ax,%ax + +00000000004028c0 : +gib_vector_alloc.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 4028c0: 41 54 push %r12 + 4028c2: 53 push %rbx + 4028c3: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4028c6: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 4028cb: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4028cf: e8 8c e8 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 4028d4: 48 85 c0 test %rax,%rax + 4028d7: 74 3b je 402914 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 4028d9: 48 8d 3c dd 00 00 00 lea 0x0(,%rbx,8),%rdi + 4028e0: 00 + 4028e1: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4028e4: e8 77 e8 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 4028e9: 48 85 c0 test %rax,%rax + 4028ec: 74 48 je 402936 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 4028ee: 49 89 44 24 18 mov %rax,0x18(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 4028f3: 4c 89 e0 mov %r12,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 4028f6: 49 c7 04 24 00 00 00 movq $0x0,(%r12) + 4028fd: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 4028fe: 49 89 5c 24 08 mov %rbx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 402903: 49 c7 44 24 10 08 00 movq $0x8,0x10(%r12) + 40290a: 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 40290c: 48 83 c4 08 add $0x8,%rsp + 402910: 5b pop %rbx + 402911: 41 5c pop %r12 + 402913: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 402914: 48 8b 3d 25 38 00 00 mov 0x3825(%rip),%rdi # 406140 + 40291b: ba 20 00 00 00 mov $0x20,%edx + 402920: be 08 40 40 00 mov $0x404008,%esi + 402925: 31 c0 xor %eax,%eax + 402927: e8 04 e8 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 40292c: bf 01 00 00 00 mov $0x1,%edi + 402931: e8 7a e8 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 402936: 48 8b 3d 03 38 00 00 mov 0x3803(%rip),%rdi # 406140 + 40293d: ba 08 00 00 00 mov $0x8,%edx + 402942: be 08 40 40 00 mov $0x404008,%esi + 402947: e8 e4 e7 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 40294c: bf 01 00 00 00 mov $0x1,%edi + 402951: e8 5a e8 ff ff call 4011b0 + 402956: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40295d: 00 00 00 + +0000000000402960 : +gib_shadowstack_initialize.part.0.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1483 +static void gib_shadowstack_initialize(GibShadowstack* stack, size_t stack_size) + 402960: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1487 + fprintf(stderr, "gib_shadowstack_initialize: gib_alloc failed: %zu", + 402964: ba 00 00 00 06 mov $0x6000000,%edx + 402969: be 30 40 40 00 mov $0x404030,%esi + 40296e: 31 c0 xor %eax,%eax + 402970: 48 8b 3d c9 37 00 00 mov 0x37c9(%rip),%rdi # 406140 + 402977: e8 b4 e7 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1489 + exit(1); + 40297c: bf 01 00 00 00 mov $0x1,%edi + 402981: e8 2a e8 ff ff call 4011b0 + 402986: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40298d: 00 00 00 + +0000000000402990 : +gib_print_timing_array(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 402990: 41 55 push %r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 402992: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 402994: 49 89 fd mov %rdi,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 402997: bf 03 47 40 00 mov $0x404703,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 40299c: 41 54 push %r12 + 40299e: 55 push %rbp + 40299f: 53 push %rbx + 4029a0: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 4029a4: e8 17 e7 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4029a9: 49 8b 45 00 mov 0x0(%r13),%rax + 4029ad: 49 8b 6d 08 mov 0x8(%r13),%rbp + 4029b1: 48 29 c5 sub %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4029b4: 48 85 ed test %rbp,%rbp + 4029b7: 7e 59 jle 402a12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 4029b9: 4c 8d 65 ff lea -0x1(%rbp),%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4029bd: 31 db xor %ebx,%ebx + 4029bf: eb 23 jmp 4029e4 + 4029c1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 4029c8: bf 14 47 40 00 mov $0x404714,%edi + 4029cd: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4029d2: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 4029d6: e8 e5 e6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4029db: 48 39 eb cmp %rbp,%rbx + 4029de: 74 32 je 402a12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4029e0: 49 8b 45 00 mov 0x0(%r13),%rax + 4029e4: 48 01 d8 add %rbx,%rax + 4029e7: 49 0f af 45 10 imul 0x10(%r13),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 4029ec: 49 8b 55 18 mov 0x18(%r13),%rdx + 4029f0: f2 0f 10 04 02 movsd (%rdx,%rax,1),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 4029f5: 4c 39 e3 cmp %r12,%rbx + 4029f8: 75 ce jne 4029c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 4029fa: bf 11 47 40 00 mov $0x404711,%edi + 4029ff: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 402a04: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 402a08: e8 b3 e6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 402a0d: 48 39 dd cmp %rbx,%rbp + 402a10: 75 ce jne 4029e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:688 +} + 402a12: 48 83 c4 08 add $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 402a16: bf 19 47 40 00 mov $0x404719,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:688 +} + 402a1b: 5b pop %rbx + 402a1c: 5d pop %rbp + 402a1d: 41 5c pop %r12 + 402a1f: 41 5d pop %r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 402a21: e9 5a e6 ff ff jmp 401080 + 402a26: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 402a2d: 00 00 00 + +0000000000402a30 : +gib_show_usage(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1797 +{ + 402a30: 53 push %rbx + 402a31: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1798 + printf("\n"); + 402a34: bf 0a 00 00 00 mov $0xa,%edi + 402a39: e8 02 e6 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1799 + printf("This binary was generated by the Gibbon compiler.\n"); + 402a3e: bf 68 40 40 00 mov $0x404068,%edi + 402a43: e8 38 e6 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1800 + printf("\n"); + 402a48: bf 0a 00 00 00 mov $0xa,%edi + 402a4d: e8 ee e5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1801 + printf("Usage: %s [OPTIONS...]\n", argv[0]); + 402a52: 48 8b 33 mov (%rbx),%rsi + 402a55: bf 1b 47 40 00 mov $0x40471b,%edi + 402a5a: 31 c0 xor %eax,%eax + 402a5c: e8 5f e6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1803 + printf("\n"); + 402a61: bf 0a 00 00 00 mov $0xa,%edi + 402a66: e8 d5 e5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1804 + printf("Options:\n"); + 402a6b: bf 33 47 40 00 mov $0x404733,%edi + 402a70: e8 0b e6 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1805 + printf(" --biginf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_biginf_init_chunk_size); + 402a75: 48 8b 35 74 36 00 00 mov 0x3674(%rip),%rsi # 4060f0 + 402a7c: bf a0 40 40 00 mov $0x4040a0,%edi + 402a81: 31 c0 xor %eax,%eax + 402a83: e8 38 e6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1806 + printf(" --inf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_inf_init_chunk_size); + 402a88: 48 8b 35 59 36 00 00 mov 0x3659(%rip),%rsi # 4060e8 + 402a8f: bf e8 40 40 00 mov $0x4040e8,%edi + 402a94: 31 c0 xor %eax,%eax + 402a96: e8 25 e6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1807 + printf(" --bench-input Set the input file read for benchmarking. Applies only\n"); + 402a9b: bf 30 41 40 00 mov $0x404130,%edi + 402aa0: e8 db e5 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1808 + printf(" If the program was *compiled* with --bench-fun. \n"); + 402aa5: bf 88 41 40 00 mov $0x404188,%edi + 402aaa: e8 d1 e5 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1809 + printf("\n"); + 402aaf: bf 0a 00 00 00 mov $0xa,%edi + 402ab4: e8 87 e5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1810 + printf(" --array-input Set the file from which to read the array input.\n"); + 402ab9: bf e0 41 40 00 mov $0x4041e0,%edi + 402abe: e8 bd e5 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1811 + printf(" --array-input-length Set the size of the array input file.\n"); + 402ac3: bf 38 42 40 00 mov $0x404238,%edi + 402ac8: e8 b3 e5 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1812 + printf(" --iterate Set the number of timing iterations to perform (default 1).\n"); + 402acd: bf 80 42 40 00 mov $0x404280,%edi + 402ad2: e8 a9 e5 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 402ad7: bf e0 42 40 00 mov $0x4042e0,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1816 +} + 402adc: 5b pop %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 402add: e9 9e e5 ff ff jmp 401080 + 402ae2: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402ae9: 00 00 00 00 + 402aed: 0f 1f 00 nopl (%rax) + +0000000000402af0 : +check_args.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 402af0: 55 push %rbp + 402af1: 48 89 fd mov %rdi,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 402af4: 48 8b 3d 45 36 00 00 mov 0x3645(%rip),%rdi # 406140 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 402afb: 48 89 f2 mov %rsi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 402afe: 31 c0 xor %eax,%eax + 402b00: be 78 43 40 00 mov $0x404378,%esi + 402b05: e8 26 e6 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1879 + gib_show_usage(argv); + 402b0a: 48 89 ef mov %rbp,%rdi + 402b0d: e8 1e ff ff ff call 402a30 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1880 + exit(1); + 402b12: bf 01 00 00 00 mov $0x1,%edi + 402b17: e8 94 e6 ff ff call 4011b0 + 402b1c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402b20 : +gib_add_symbol(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:411 +{ + 402b20: 41 56 push %r14 + 402b22: 41 55 push %r13 + 402b24: 41 54 push %r12 + 402b26: 49 89 fc mov %rdi,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402b29: bf 40 01 00 00 mov $0x140,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:411 +{ + 402b2e: 55 push %rbp + 402b2f: 48 89 f5 mov %rsi,%rbp + 402b32: 53 push %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402b33: e8 28 e6 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 402b38: 48 89 ee mov %rbp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:414 + s->idx = idx; + 402b3b: 4c 89 20 mov %r12,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 402b3e: 48 8d 78 08 lea 0x8(%rax),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402b42: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 402b45: e8 16 e5 ff ff call 401060 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + HASH_ADD(hh, global_sym_table, idx, sizeof(GibSym), s); + 402b4a: 4c 89 e0 mov %r12,%rax + 402b4d: 4c 89 e1 mov %r12,%rcx + 402b50: 48 89 9b 30 01 00 00 mov %rbx,0x130(%rbx) + 402b57: 48 c1 e8 38 shr $0x38,%rax + 402b5b: 48 c1 e9 30 shr $0x30,%rcx + 402b5f: c7 83 38 01 00 00 08 movl $0x8,0x138(%rbx) + 402b66: 00 00 00 + 402b69: 48 89 c2 mov %rax,%rdx + 402b6c: 4c 89 e0 mov %r12,%rax + 402b6f: 0f b6 c9 movzbl %cl,%ecx + 402b72: 48 c1 e8 20 shr $0x20,%rax + 402b76: c1 e2 18 shl $0x18,%edx + 402b79: 0f b6 c0 movzbl %al,%eax + 402b7c: c1 e1 10 shl $0x10,%ecx + 402b7f: 8d 94 02 b9 79 37 9e lea -0x61c88647(%rdx,%rax,1),%edx + 402b86: 8d 04 0a lea (%rdx,%rcx,1),%eax + 402b89: 4c 89 e1 mov %r12,%rcx + 402b8c: 44 89 e2 mov %r12d,%edx + 402b8f: 48 c1 e9 28 shr $0x28,%rcx + 402b93: 81 e2 ff ff 00 ff and $0xff00ffff,%edx + 402b99: 0f b6 c9 movzbl %cl,%ecx + 402b9c: c1 e1 08 shl $0x8,%ecx + 402b9f: 01 c1 add %eax,%ecx + 402ba1: 4c 89 e0 mov %r12,%rax + 402ba4: 48 c1 e8 10 shr $0x10,%rax + 402ba8: 0f b6 c0 movzbl %al,%eax + 402bab: c1 e0 10 shl $0x10,%eax + 402bae: 8d 84 02 c2 ba 49 9f lea -0x60b6453e(%rdx,%rax,1),%eax + 402bb5: 29 c8 sub %ecx,%eax + 402bb7: 81 c1 09 41 12 01 add $0x1124109,%ecx + 402bbd: 35 6d f7 07 00 xor $0x7f76d,%eax + 402bc2: 29 c1 sub %eax,%ecx + 402bc4: 89 ca mov %ecx,%edx + 402bc6: 89 c1 mov %eax,%ecx + 402bc8: c1 e1 08 shl $0x8,%ecx + 402bcb: 31 d1 xor %edx,%ecx + 402bcd: ba f7 be ed fe mov $0xfeedbef7,%edx + 402bd2: 29 c2 sub %eax,%edx + 402bd4: 29 c8 sub %ecx,%eax + 402bd6: 89 d6 mov %edx,%esi + 402bd8: 89 ca mov %ecx,%edx + 402bda: 29 ce sub %ecx,%esi + 402bdc: c1 ea 0d shr $0xd,%edx + 402bdf: 31 f2 xor %esi,%edx + 402be1: 89 d6 mov %edx,%esi + 402be3: 29 d0 sub %edx,%eax + 402be5: 29 d1 sub %edx,%ecx + 402be7: c1 ee 0c shr $0xc,%esi + 402bea: 31 f0 xor %esi,%eax + 402bec: 89 ce mov %ecx,%esi + 402bee: 89 c1 mov %eax,%ecx + 402bf0: 29 c6 sub %eax,%esi + 402bf2: 29 c2 sub %eax,%edx + 402bf4: c1 e1 10 shl $0x10,%ecx + 402bf7: 31 f1 xor %esi,%ecx + 402bf9: 89 d6 mov %edx,%esi + 402bfb: 89 ca mov %ecx,%edx + 402bfd: 29 ce sub %ecx,%esi + 402bff: 29 c8 sub %ecx,%eax + 402c01: c1 ea 05 shr $0x5,%edx + 402c04: 31 f2 xor %esi,%edx + 402c06: 89 d6 mov %edx,%esi + 402c08: 29 d0 sub %edx,%eax + 402c0a: 29 d1 sub %edx,%ecx + 402c0c: c1 ee 03 shr $0x3,%esi + 402c0f: 31 f0 xor %esi,%eax + 402c11: 89 c5 mov %eax,%ebp + 402c13: 29 c1 sub %eax,%ecx + 402c15: 29 c2 sub %eax,%edx + 402c17: 48 8b 05 3a 35 00 00 mov 0x353a(%rip),%rax # 406158 + 402c1e: c1 e5 0a shl $0xa,%ebp + 402c21: 31 e9 xor %ebp,%ecx + 402c23: 29 ca sub %ecx,%edx + 402c25: c1 e9 0f shr $0xf,%ecx + 402c28: 31 d1 xor %edx,%ecx + 402c2a: 89 8b 3c 01 00 00 mov %ecx,0x13c(%rbx) + 402c30: 89 cd mov %ecx,%ebp + 402c32: 48 85 c0 test %rax,%rax + 402c35: 0f 84 a7 01 00 00 je 402de2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 29) + 402c3b: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402c42: 4c 8d ab 08 01 00 00 lea 0x108(%rbx),%r13 + 402c49: 48 c7 83 18 01 00 00 movq $0x0,0x118(%rbx) + 402c50: 00 00 00 00 + 402c54: 48 89 93 08 01 00 00 mov %rdx,0x108(%rbx) + 402c5b: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402c62: 48 8b 4a 18 mov 0x18(%rdx),%rcx + 402c66: 48 89 ce mov %rcx,%rsi + 402c69: 48 2b 72 20 sub 0x20(%rdx),%rsi + 402c6d: 48 89 b3 10 01 00 00 mov %rsi,0x110(%rbx) + 402c74: 48 89 59 10 mov %rbx,0x10(%rcx) + 402c78: 4c 89 6a 18 mov %r13,0x18(%rdx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 37) + 402c7c: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402c83: 8b 42 08 mov 0x8(%rdx),%eax + 402c86: 83 42 10 01 addl $0x1,0x10(%rdx) + 402c8a: 83 e8 01 sub $0x1,%eax + 402c8d: 21 e8 and %ebp,%eax + 402c8f: 48 c1 e0 04 shl $0x4,%rax + 402c93: 48 03 02 add (%rdx),%rax + 402c96: 8b 78 08 mov 0x8(%rax),%edi + 402c99: 48 8b 08 mov (%rax),%rcx + 402c9c: 8d 57 01 lea 0x1(%rdi),%edx + 402c9f: 89 50 08 mov %edx,0x8(%rax) + 402ca2: 48 89 8b 28 01 00 00 mov %rcx,0x128(%rbx) + 402ca9: 48 c7 83 20 01 00 00 movq $0x0,0x120(%rbx) + 402cb0: 00 00 00 00 + 402cb4: 48 85 c9 test %rcx,%rcx + 402cb7: 74 04 je 402cbd +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 38) + 402cb9: 4c 89 69 18 mov %r13,0x18(%rcx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 40) + 402cbd: 4c 89 28 mov %r13,(%rax) + 402cc0: 8b 40 0c mov 0xc(%rax),%eax + 402cc3: 8d 44 80 05 lea 0x5(%rax,%rax,4),%eax + 402cc7: 01 c0 add %eax,%eax + 402cc9: 39 c2 cmp %eax,%edx + 402ccb: 72 0d jb 402cda +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 41) + 402ccd: 48 8b ab 08 01 00 00 mov 0x108(%rbx),%rbp + 402cd4: 83 7d 34 00 cmpl $0x0,0x34(%rbp) + 402cd8: 74 19 je 402cf3 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:417 + if (idx > gib_global_gensym_counter) { + 402cda: 4c 39 25 6f 34 00 00 cmp %r12,0x346f(%rip) # 406150 + 402ce1: 73 07 jae 402cea +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:418 + gib_global_gensym_counter = idx; + 402ce3: 4c 89 25 66 34 00 00 mov %r12,0x3466(%rip) # 406150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:421 +} + 402cea: 5b pop %rbx + 402ceb: 5d pop %rbp + 402cec: 41 5c pop %r12 + 402cee: 41 5d pop %r13 + 402cf0: 41 5e pop %r14 + 402cf2: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 42) + HASH_ADD(hh, global_sym_table, idx, sizeof(GibSym), s); + 402cf3: 8b 7d 08 mov 0x8(%rbp),%edi + 402cf6: be 01 00 00 00 mov $0x1,%esi + 402cfb: 48 c1 e7 05 shl $0x5,%rdi + 402cff: e8 fc e3 ff ff call 401100 + 402d04: 49 89 c5 mov %rax,%r13 + 402d07: 48 85 c0 test %rax,%rax + 402d0a: 0f 84 a4 01 00 00 je 402eb4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 44) + 402d10: 8b 55 08 mov 0x8(%rbp),%edx + 402d13: 8b 45 10 mov 0x10(%rbp),%eax + 402d16: c7 45 2c 00 00 00 00 movl $0x0,0x2c(%rbp) + 402d1d: 8b 7d 0c mov 0xc(%rbp),%edi + 402d20: 44 8d 44 12 ff lea -0x1(%rdx,%rdx,1),%r8d + 402d25: 8d 4f 01 lea 0x1(%rdi),%ecx + 402d28: 89 c7 mov %eax,%edi + 402d2a: 44 21 c0 and %r8d,%eax + 402d2d: d3 ef shr %cl,%edi + 402d2f: 83 f8 01 cmp $0x1,%eax + 402d32: 83 df ff sbb $0xffffffff,%edi + 402d35: 89 7d 28 mov %edi,0x28(%rbp) + 402d38: 85 d2 test %edx,%edx + 402d3a: 0f 84 26 01 00 00 je 402e66 + 402d40: 48 8b 45 00 mov 0x0(%rbp),%rax + 402d44: 44 8d 52 ff lea -0x1(%rdx),%r10d + 402d48: 49 c1 e2 04 shl $0x4,%r10 + 402d4c: 4c 8d 48 10 lea 0x10(%rax),%r9 + 402d50: 4d 01 ca add %r9,%r10 + 402d53: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 63) + 402d58: 48 8b 08 mov (%rax),%rcx + 402d5b: 48 85 c9 test %rcx,%rcx + 402d5e: 75 17 jne 402d77 + 402d60: eb 6b jmp 402dcd + 402d62: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 56) + 402d68: 48 89 4a 18 mov %rcx,0x18(%rdx) + 402d6c: 48 89 08 mov %rcx,(%rax) + 402d6f: 48 85 f6 test %rsi,%rsi + 402d72: 74 59 je 402dcd +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402d74: 48 89 f1 mov %rsi,%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 60) + 402d77: 44 89 c0 mov %r8d,%eax + 402d7a: 23 41 34 and 0x34(%rcx),%eax + 402d7d: 48 8b 71 20 mov 0x20(%rcx),%rsi + 402d81: 48 c1 e0 04 shl $0x4,%rax + 402d85: 4c 01 e8 add %r13,%rax + 402d88: 8b 50 08 mov 0x8(%rax),%edx + 402d8b: 83 c2 01 add $0x1,%edx + 402d8e: 89 50 08 mov %edx,0x8(%rax) + 402d91: 39 d7 cmp %edx,%edi + 402d93: 73 1c jae 402db1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 51) + 402d95: 44 8b 58 0c mov 0xc(%rax),%r11d + 402d99: 41 89 fe mov %edi,%r14d + 402d9c: 83 45 2c 01 addl $0x1,0x2c(%rbp) + 402da0: 45 0f af f3 imul %r11d,%r14d + 402da4: 44 39 f2 cmp %r14d,%edx + 402da7: 76 08 jbe 402db1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 53) + 402da9: 41 83 c3 01 add $0x1,%r11d + 402dad: 44 89 58 0c mov %r11d,0xc(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 55) + 402db1: 48 8b 10 mov (%rax),%rdx + 402db4: 48 c7 41 18 00 00 00 movq $0x0,0x18(%rcx) + 402dbb: 00 + 402dbc: 48 89 51 20 mov %rdx,0x20(%rcx) + 402dc0: 48 85 d2 test %rdx,%rdx + 402dc3: 75 a3 jne 402d68 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 58) + 402dc5: 48 89 08 mov %rcx,(%rax) + 402dc8: 48 85 f6 test %rsi,%rsi + 402dcb: 75 a7 jne 402d74 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402dcd: 4c 89 c8 mov %r9,%rax + 402dd0: 4d 39 d1 cmp %r10,%r9 + 402dd3: 0f 84 8d 00 00 00 je 402e66 + 402dd9: 49 83 c1 10 add $0x10,%r9 + 402ddd: e9 76 ff ff ff jmp 402d58 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 28) + 402de2: 66 0f ef c0 pxor %xmm0,%xmm0 + 402de6: bf 40 00 00 00 mov $0x40,%edi + 402deb: 0f 11 83 10 01 00 00 movups %xmm0,0x110(%rbx) + 402df2: e8 69 e3 ff ff call 401160 + 402df7: 48 89 83 08 01 00 00 mov %rax,0x108(%rbx) + 402dfe: 49 89 c6 mov %rax,%r14 + 402e01: 48 85 c0 test %rax,%rax + 402e04: 0f 84 aa 00 00 00 je 402eb4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 31) + 402e0a: 48 8d 50 10 lea 0x10(%rax),%rdx + 402e0e: b9 0c 00 00 00 mov $0xc,%ecx + 402e13: 31 c0 xor %eax,%eax + 402e15: be 01 00 00 00 mov $0x1,%esi + 402e1a: 48 89 d7 mov %rdx,%rdi + 402e1d: 4c 8d ab 08 01 00 00 lea 0x108(%rbx),%r13 + 402e24: f3 ab rep stos %eax,%es:(%rdi) + 402e26: 48 8b 05 c3 1a 00 00 mov 0x1ac3(%rip),%rax # 4048f0 <__PRETTY_FUNCTION__.3+0x20> + 402e2d: 4d 89 6e 18 mov %r13,0x18(%r14) + 402e31: bf 00 02 00 00 mov $0x200,%edi + 402e36: 49 c7 46 20 08 01 00 movq $0x108,0x20(%r14) + 402e3d: 00 + 402e3e: 49 89 46 08 mov %rax,0x8(%r14) + 402e42: e8 b9 e2 ff ff call 401100 + 402e47: 41 c7 46 38 e1 1f 11 movl $0xa0111fe1,0x38(%r14) + 402e4e: a0 + 402e4f: 49 89 06 mov %rax,(%r14) + 402e52: 48 85 c0 test %rax,%rax + 402e55: 74 5d je 402eb4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 33) + 402e57: 48 89 1d fa 32 00 00 mov %rbx,0x32fa(%rip) # 406158 + 402e5e: 48 89 d8 mov %rbx,%rax + 402e61: e9 16 fe ff ff jmp 402c7c +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402e66: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 402e6a: e8 c1 e1 ff ff call 401030 + 402e6f: 48 8b 83 08 01 00 00 mov 0x108(%rbx),%rax + 402e76: 8b 50 10 mov 0x10(%rax),%edx + 402e79: 83 40 0c 01 addl $0x1,0xc(%rax) + 402e7d: 4c 89 28 mov %r13,(%rax) + 402e80: d1 60 08 shll $1,0x8(%rax) + 402e83: d1 ea shr $1,%edx + 402e85: 39 50 2c cmp %edx,0x2c(%rax) + 402e88: 76 1e jbe 402ea8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 65) + 402e8a: 8b 58 30 mov 0x30(%rax),%ebx + 402e8d: 8d 53 01 lea 0x1(%rbx),%edx + 402e90: 89 50 30 mov %edx,0x30(%rax) + 402e93: 83 fa 01 cmp $0x1,%edx + 402e96: 0f 86 3e fe ff ff jbe 402cda +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 69) + 402e9c: c7 40 34 01 00 00 00 movl $0x1,0x34(%rax) + 402ea3: e9 32 fe ff ff jmp 402cda +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402ea8: c7 40 30 00 00 00 00 movl $0x0,0x30(%rax) + 402eaf: e9 26 fe ff ff jmp 402cda +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 30) + 402eb4: 83 cf ff or $0xffffffff,%edi + 402eb7: e8 f4 e2 ff ff call 4011b0 + 402ebc: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402ec0 : +gib_check_rust_struct_sizes(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:994 +{ + 402ec0: 55 push %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402ec1: bf 38 00 00 00 mov $0x38,%edi + 402ec6: e8 95 e2 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402ecb: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402ecf: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:999 + nursery = (size_t *) ((char *) frame + sizeof(size_t)); + 402ed2: 48 8d 50 10 lea 0x10(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1000 + generation = (size_t *) ((char *) nursery + sizeof(size_t)); + 402ed6: 48 8d 48 18 lea 0x18(%rax),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:998 + frame = (size_t *) ((char *) stack + sizeof(size_t)); + 402eda: 48 8d 70 08 lea 0x8(%rax),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1003 + gc_stats = (size_t *) ((char *) footer + sizeof(size_t)); + 402ede: 48 83 c0 30 add $0x30,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402ee2: 4c 8d 4d 28 lea 0x28(%rbp),%r9 + 402ee6: 48 89 ef mov %rbp,%rdi + 402ee9: 50 push %rax + 402eea: 4c 8d 45 20 lea 0x20(%rbp),%r8 + 402eee: e8 9d e2 ff ff call 401190 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 + assert(*stack == sizeof(GibShadowstack)); + 402ef3: 48 83 7d 00 18 cmpq $0x18,0x0(%rbp) + 402ef8: 58 pop %rax + 402ef9: 5a pop %rdx + 402efa: 75 42 jne 402f3e +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 + assert(*frame == sizeof(GibShadowstackFrame)); + 402efc: 48 83 7d 08 18 cmpq $0x18,0x8(%rbp) + 402f01: 0f 85 cd 00 00 00 jne 402fd4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 + assert(*nursery == sizeof(GibNursery)); + 402f07: 48 83 7d 10 20 cmpq $0x20,0x10(%rbp) + 402f0c: 0f 85 a9 00 00 00 jne 402fbb +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 + assert(*generation == sizeof(GibOldgen)); + 402f12: 48 83 7d 18 18 cmpq $0x18,0x18(%rbp) + 402f17: 0f 85 85 00 00 00 jne 402fa2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 + assert(*reg_info == sizeof(GibRegionInfo)); + 402f1d: 48 83 7d 20 20 cmpq $0x20,0x20(%rbp) + 402f22: 75 65 jne 402f89 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 + assert(*footer == sizeof(GibOldgenChunkFooter)); + 402f24: 48 83 7d 28 18 cmpq $0x18,0x28(%rbp) + 402f29: 75 45 jne 402f70 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 + assert(*gc_stats == sizeof(GibGcStats)); + 402f2b: 48 81 7d 30 f0 00 00 cmpq $0xf0,0x30(%rbp) + 402f32: 00 + 402f33: 75 22 jne 402f57 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 402f35: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1019 +} + 402f38: 5d pop %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 402f39: e9 f2 e0 ff ff jmp 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 (discriminator 1) + assert(*stack == sizeof(GibShadowstack)); + 402f3e: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402f43: ba ef 03 00 00 mov $0x3ef,%edx + 402f48: be a8 43 40 00 mov $0x4043a8,%esi + 402f4d: bf e8 43 40 00 mov $0x4043e8,%edi + 402f52: e8 89 e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 (discriminator 1) + assert(*gc_stats == sizeof(GibGcStats)); + 402f57: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402f5c: ba f5 03 00 00 mov $0x3f5,%edx + 402f61: be a8 43 40 00 mov $0x4043a8,%esi + 402f66: bf d0 44 40 00 mov $0x4044d0,%edi + 402f6b: e8 70 e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 (discriminator 1) + assert(*footer == sizeof(GibOldgenChunkFooter)); + 402f70: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402f75: ba f4 03 00 00 mov $0x3f4,%edx + 402f7a: be a8 43 40 00 mov $0x4043a8,%esi + 402f7f: bf a8 44 40 00 mov $0x4044a8,%edi + 402f84: e8 57 e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 (discriminator 1) + assert(*reg_info == sizeof(GibRegionInfo)); + 402f89: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402f8e: ba f3 03 00 00 mov $0x3f3,%edx + 402f93: be a8 43 40 00 mov $0x4043a8,%esi + 402f98: bf 80 44 40 00 mov $0x404480,%edi + 402f9d: e8 3e e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 (discriminator 1) + assert(*generation == sizeof(GibOldgen)); + 402fa2: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402fa7: ba f2 03 00 00 mov $0x3f2,%edx + 402fac: be a8 43 40 00 mov $0x4043a8,%esi + 402fb1: bf 58 44 40 00 mov $0x404458,%edi + 402fb6: e8 25 e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 (discriminator 1) + assert(*nursery == sizeof(GibNursery)); + 402fbb: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402fc0: ba f1 03 00 00 mov $0x3f1,%edx + 402fc5: be a8 43 40 00 mov $0x4043a8,%esi + 402fca: bf 38 44 40 00 mov $0x404438,%edi + 402fcf: e8 0c e1 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 (discriminator 1) + assert(*frame == sizeof(GibShadowstackFrame)); + 402fd4: b9 d0 48 40 00 mov $0x4048d0,%ecx + 402fd9: ba f0 03 00 00 mov $0x3f0,%edx + 402fde: be a8 43 40 00 mov $0x4043a8,%esi + 402fe3: bf 10 44 40 00 mov $0x404410,%edi + 402fe8: e8 f3 e0 ff ff call 4010e0 <__assert_fail@plt> + 402fed: 0f 1f 00 nopl (%rax) + +0000000000402ff0 : +gib_print_symbol.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:458 +int gib_print_symbol(GibSym idx) + 402ff0: 48 83 ec 18 sub $0x18,%rsp + 402ff4: 48 89 7c 24 08 mov %rdi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:460 + if (idx == comma_symbol) { + 402ff9: 48 83 ff ff cmp $0xffffffffffffffff,%rdi + 402ffd: 0f 84 65 01 00 00 je 403168 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:472 + HASH_FIND(hh, global_sym_table, &idx, sizeof(GibSym), s); + 403003: 48 8b 35 4e 31 00 00 mov 0x314e(%rip),%rsi # 406158 + 40300a: 49 89 f8 mov %rdi,%r8 + 40300d: 48 85 f6 test %rsi,%rsi + 403010: 0f 84 3a 01 00 00 je 403150 + 403016: 0f b6 44 24 0f movzbl 0xf(%rsp),%eax + 40301b: 0f b6 54 24 0c movzbl 0xc(%rsp),%edx + 403020: 0f b6 7c 24 0e movzbl 0xe(%rsp),%edi + 403025: c1 e0 18 shl $0x18,%eax + 403028: c1 e7 10 shl $0x10,%edi + 40302b: 8d 94 10 b9 79 37 9e lea -0x61c88647(%rax,%rdx,1),%edx + 403032: 8d 04 3a lea (%rdx,%rdi,1),%eax + 403035: 0f b6 7c 24 0d movzbl 0xd(%rsp),%edi + 40303a: 0f b6 54 24 08 movzbl 0x8(%rsp),%edx + 40303f: c1 e7 08 shl $0x8,%edi + 403042: 01 c7 add %eax,%edi + 403044: 0f b6 44 24 0b movzbl 0xb(%rsp),%eax + 403049: c1 e0 18 shl $0x18,%eax + 40304c: 8d 8c 02 c2 ba 49 9f lea -0x60b6453e(%rdx,%rax,1),%ecx + 403053: 0f b6 44 24 0a movzbl 0xa(%rsp),%eax + 403058: c1 e0 10 shl $0x10,%eax + 40305b: 8d 14 01 lea (%rcx,%rax,1),%edx + 40305e: 0f b6 44 24 09 movzbl 0x9(%rsp),%eax + 403063: b9 f7 be ed fe mov $0xfeedbef7,%ecx + 403068: c1 e0 08 shl $0x8,%eax + 40306b: 01 d0 add %edx,%eax + 40306d: 29 f8 sub %edi,%eax + 40306f: 81 c7 09 41 12 01 add $0x1124109,%edi + 403075: 35 6d f7 07 00 xor $0x7f76d,%eax + 40307a: 89 c2 mov %eax,%edx + 40307c: 29 c7 sub %eax,%edi + 40307e: 29 c1 sub %eax,%ecx + 403080: c1 e2 08 shl $0x8,%edx + 403083: 31 fa xor %edi,%edx + 403085: 29 d1 sub %edx,%ecx + 403087: 29 d0 sub %edx,%eax + 403089: 89 cf mov %ecx,%edi + 40308b: 89 d1 mov %edx,%ecx + 40308d: c1 e9 0d shr $0xd,%ecx + 403090: 31 f9 xor %edi,%ecx + 403092: 89 cf mov %ecx,%edi + 403094: 29 c8 sub %ecx,%eax + 403096: 29 ca sub %ecx,%edx + 403098: c1 ef 0c shr $0xc,%edi + 40309b: 31 f8 xor %edi,%eax + 40309d: 89 d7 mov %edx,%edi + 40309f: 89 c2 mov %eax,%edx + 4030a1: 29 c7 sub %eax,%edi + 4030a3: 29 c1 sub %eax,%ecx + 4030a5: c1 e2 10 shl $0x10,%edx + 4030a8: 31 fa xor %edi,%edx + 4030aa: 29 d1 sub %edx,%ecx + 4030ac: 29 d0 sub %edx,%eax + 4030ae: 89 cf mov %ecx,%edi + 4030b0: 89 d1 mov %edx,%ecx + 4030b2: c1 e9 05 shr $0x5,%ecx + 4030b5: 31 f9 xor %edi,%ecx + 4030b7: 89 cf mov %ecx,%edi + 4030b9: 29 c8 sub %ecx,%eax + 4030bb: c1 ef 03 shr $0x3,%edi + 4030be: 29 ca sub %ecx,%edx + 4030c0: 31 c7 xor %eax,%edi + 4030c2: 89 d0 mov %edx,%eax + 4030c4: 89 fa mov %edi,%edx + 4030c6: 29 f8 sub %edi,%eax + 4030c8: c1 e2 0a shl $0xa,%edx + 4030cb: 31 c2 xor %eax,%edx + 4030cd: 89 c8 mov %ecx,%eax + 4030cf: 48 8b 8e 08 01 00 00 mov 0x108(%rsi),%rcx + 4030d6: 29 f8 sub %edi,%eax + 4030d8: 8b 79 08 mov 0x8(%rcx),%edi + 4030db: 29 d0 sub %edx,%eax + 4030dd: c1 ea 0f shr $0xf,%edx + 4030e0: 31 d0 xor %edx,%eax + 4030e2: 8d 57 ff lea -0x1(%rdi),%edx + 4030e5: 21 c2 and %eax,%edx + 4030e7: 48 c1 e2 04 shl $0x4,%rdx + 4030eb: 48 03 11 add (%rcx),%rdx + 4030ee: 48 8b 32 mov (%rdx),%rsi + 4030f1: 48 85 f6 test %rsi,%rsi + 4030f4: 74 5a je 403150 + 4030f6: 48 8b 49 20 mov 0x20(%rcx),%rcx + 4030fa: 48 89 ca mov %rcx,%rdx + 4030fd: 48 29 ce sub %rcx,%rsi + 403100: 48 f7 da neg %rdx + 403103: eb 12 jmp 403117 + 403105: 0f 1f 00 nopl (%rax) + 403108: 48 8b b6 28 01 00 00 mov 0x128(%rsi),%rsi + 40310f: 48 85 f6 test %rsi,%rsi + 403112: 74 3c je 403150 + 403114: 48 01 d6 add %rdx,%rsi + 403117: 3b 86 3c 01 00 00 cmp 0x13c(%rsi),%eax + 40311d: 75 e9 jne 403108 + 40311f: 83 be 38 01 00 00 08 cmpl $0x8,0x138(%rsi) + 403126: 75 e0 jne 403108 + 403128: 48 8b 8e 30 01 00 00 mov 0x130(%rsi),%rcx + 40312f: 48 8b 09 mov (%rcx),%rcx + 403132: 48 39 4c 24 08 cmp %rcx,0x8(%rsp) + 403137: 75 cf jne 403108 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:476 + return printf("%s", s->value); + 403139: 48 83 c6 08 add $0x8,%rsi + 40313d: bf 40 47 40 00 mov $0x404740,%edi + 403142: 31 c0 xor %eax,%eax + 403144: e8 77 df ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 403149: 48 83 c4 18 add $0x18,%rsp + 40314d: c3 ret + 40314e: 66 90 xchg %ax,%ax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:474 + return printf("%" PRId64, idx); + 403150: 4c 89 c6 mov %r8,%rsi + 403153: bf 3c 47 40 00 mov $0x40473c,%edi + 403158: 31 c0 xor %eax,%eax + 40315a: e8 61 df ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 40315f: 48 83 c4 18 add $0x18,%rsp + 403163: c3 ret + 403164: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:461 + return printf(","); + 403168: bf 2c 00 00 00 mov $0x2c,%edi + 40316d: e8 ce de ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 403172: 48 83 c4 18 add $0x18,%rsp + 403176: c3 ret + 403177: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 40317e: 00 00 + +0000000000403180 : +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:124 +unsigned char printVec_loop_545_802(GibInt idx_160_908_1079, + 403180: 41 54 push %r12 + 403182: 49 89 d4 mov %rdx,%r12 + 403185: 55 push %rbp + 403186: 48 89 f5 mov %rsi,%rbp + 403189: 53 push %rbx + 40318a: 48 89 fb mov %rdi,%rbx + 40318d: 48 83 ec 10 sub $0x10,%rsp +printVec_loop_545_802.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 403191: 48 8b 02 mov (%rdx),%rax + 403194: 48 01 f8 add %rdi,%rax + 403197: 48 0f af 42 10 imul 0x10(%rdx),%rax +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:137 + GibInt i_47_891_973_1083 = *tmp_0; + 40319c: 48 8b 52 18 mov 0x18(%rdx),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 4031a0: bf 3c 47 40 00 mov $0x40473c,%edi + 4031a5: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 4031a9: 31 c0 xor %eax,%eax + 4031ab: e8 10 df ff ff call 4010c0 +printVec_loop_545_802.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:472 + HASH_FIND(hh, global_sym_table, &idx, sizeof(GibSym), s); + 4031b0: 48 8b 05 a1 2f 00 00 mov 0x2fa1(%rip),%rax # 406158 + 4031b7: 48 c7 44 24 08 d6 04 movq $0x4d6,0x8(%rsp) + 4031be: 00 00 + 4031c0: 48 85 c0 test %rax,%rax + 4031c3: 0f 84 97 00 00 00 je 403260 + 4031c9: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 4031d0: 8b 42 08 mov 0x8(%rdx),%eax + 4031d3: 83 e8 01 sub $0x1,%eax + 4031d6: 25 75 05 08 4d and $0x4d080575,%eax + 4031db: 48 c1 e0 04 shl $0x4,%rax + 4031df: 48 03 02 add (%rdx),%rax + 4031e2: 48 8b 30 mov (%rax),%rsi + 4031e5: 48 85 f6 test %rsi,%rsi + 4031e8: 74 76 je 403260 + 4031ea: 48 8b 52 20 mov 0x20(%rdx),%rdx + 4031ee: 48 89 d0 mov %rdx,%rax + 4031f1: 48 29 d6 sub %rdx,%rsi + 4031f4: 48 f7 d8 neg %rax + 4031f7: eb 16 jmp 40320f + 4031f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) + 403200: 48 8b b6 28 01 00 00 mov 0x128(%rsi),%rsi + 403207: 48 85 f6 test %rsi,%rsi + 40320a: 74 54 je 403260 + 40320c: 48 01 c6 add %rax,%rsi + 40320f: 81 be 3c 01 00 00 75 cmpl $0x4d080575,0x13c(%rsi) + 403216: 05 08 4d + 403219: 75 e5 jne 403200 + 40321b: 83 be 38 01 00 00 08 cmpl $0x8,0x138(%rsi) + 403222: 75 dc jne 403200 + 403224: 48 8b 96 30 01 00 00 mov 0x130(%rsi),%rdx + 40322b: 48 8b 0a mov (%rdx),%rcx + 40322e: 48 39 4c 24 08 cmp %rcx,0x8(%rsp) + 403233: 75 cb jne 403200 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:476 + return printf("%s", s->value); + 403235: 48 83 c6 08 add $0x8,%rsi + 403239: bf 40 47 40 00 mov $0x404740,%edi + 40323e: 31 c0 xor %eax,%eax + 403240: e8 7b de ff ff call 4010c0 +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 403245: 48 8d 43 01 lea 0x1(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 403249: 48 39 e8 cmp %rbp,%rax + 40324c: 75 2c jne 40327a +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:147 +} + 40324e: 48 83 c4 10 add $0x10,%rsp + 403252: 5b pop %rbx + 403253: 5d pop %rbp + 403254: 41 5c pop %r12 + 403256: c3 ret + 403257: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 40325e: 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:474 + return printf("%" PRId64, idx); + 403260: be d6 04 00 00 mov $0x4d6,%esi + 403265: bf 3c 47 40 00 mov $0x40473c,%edi + 40326a: 31 c0 xor %eax,%eax + 40326c: e8 4f de ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 403271: 48 8d 43 01 lea 0x1(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 403275: 48 39 e8 cmp %rbp,%rax + 403278: 74 d4 je 40324e +printVec_loop_545_802.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40327a: 49 03 04 24 add (%r12),%rax + 40327e: 49 0f af 44 24 10 imul 0x10(%r12),%rax +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 403284: bf 3c 47 40 00 mov $0x40473c,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:137 + GibInt i_47_891_973_1083 = *tmp_0; + 403289: 49 8b 54 24 18 mov 0x18(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 40328e: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 403292: 31 c0 xor %eax,%eax + 403294: e8 27 de ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:140 + unsigned char wildcard__184_166_912_1085 = gib_print_symbol(1238); + 403299: bf d6 04 00 00 mov $0x4d6,%edi + 40329e: e8 4d fd ff ff call 402ff0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 4032a3: 48 8d 43 02 lea 0x2(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 4032a7: 48 39 c5 cmp %rax,%rbp + 4032aa: 74 a2 je 40324e +printVec_loop_545_802.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4032ac: 49 03 04 24 add (%r12),%rax + 4032b0: 49 0f af 44 24 10 imul 0x10(%r12),%rax +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 4032b6: bf 3c 47 40 00 mov $0x40473c,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:137 + GibInt i_47_891_973_1083 = *tmp_0; + 4032bb: 49 8b 54 24 18 mov 0x18(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 4032c0: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 4032c4: 31 c0 xor %eax,%eax + 4032c6: e8 f5 dd ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:140 + unsigned char wildcard__184_166_912_1085 = gib_print_symbol(1238); + 4032cb: bf d6 04 00 00 mov $0x4d6,%edi + 4032d0: e8 1b fd ff ff call 402ff0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 4032d5: 48 8d 43 03 lea 0x3(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 4032d9: 48 39 c5 cmp %rax,%rbp + 4032dc: 0f 84 6c ff ff ff je 40324e +printVec_loop_545_802.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4032e2: 49 03 04 24 add (%r12),%rax + 4032e6: 49 0f af 44 24 10 imul 0x10(%r12),%rax +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 4032ec: bf 3c 47 40 00 mov $0x40473c,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:137 + GibInt i_47_891_973_1083 = *tmp_0; + 4032f1: 49 8b 54 24 18 mov 0x18(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 4032f6: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 4032fa: 31 c0 xor %eax,%eax + 4032fc: e8 bf dd ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:140 + unsigned char wildcard__184_166_912_1085 = gib_print_symbol(1238); + 403301: bf d6 04 00 00 mov $0x4d6,%edi + 403306: e8 e5 fc ff ff call 402ff0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 40330b: 48 8d 7b 04 lea 0x4(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 40330f: 48 39 fd cmp %rdi,%rbp + 403312: 0f 84 36 ff ff ff je 40324e + 403318: 4c 89 e2 mov %r12,%rdx + 40331b: 48 89 ee mov %rbp,%rsi + 40331e: e8 5d fe ff ff call 403180 + 403323: e9 26 ff ff ff jmp 40324e + +Disassembly of section .fini: + +0000000000403328 <_fini>: +_fini(): + 403328: f3 0f 1e fa endbr64 + 40332c: 48 83 ec 08 sub $0x8,%rsp + 403330: 48 83 c4 08 add $0x8,%rsp + 403334: c3 ret diff --git a/microbench/tail_recursion/InsertionSortNoTailCallOptimized.out b/microbench/tail_recursion/InsertionSortNoTailCallOptimized.out new file mode 100644 index 000000000..aae39285f --- /dev/null +++ b/microbench/tail_recursion/InsertionSortNoTailCallOptimized.out @@ -0,0 +1,48 @@ +Rust config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Eager promotion is enabled. +Burning is enabled. +Compaction is enabled. +INFO_TABLE: [[], [], [], [], [], [], []] + +C config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generational GC is disabled. +Eager promotion is enabled. +Simple write barrier is disabled. +Nursery size=4194304 +Max chunk size=65500 +Initial chunk size=512 + +Number of threads: 1 +Nursery info: start=0x7f19e30b6010, end=0x7f19e34b6010, alloc=0x7f19e34b6010, size=4194304 + +itertime: 0.203331 +itertime: 0.179642 +itertime: 0.180543 +itertime: 0.180149 +itertime: 0.180349 +itertime: 0.181682 +itertime: 0.181503 +itertime: 0.180858 +itertime: 0.180413 +ITER TIMES: [0.179642, 0.180149, 0.180349, 0.180413, 0.180543, 0.180858, 0.181503, 0.181682, 0.203331] +ITERS: 9 +SIZE: 10000 +BATCHTIME: 1.648470e+00 +SELFTIMED: 1.805431e-01 +itertime: 0.280214 +itertime: 0.280760 +itertime: 0.280197 +itertime: 0.280392 +itertime: 0.280341 +itertime: 0.280401 +itertime: 0.280494 +itertime: 0.280684 +itertime: 0.280467 +ITER TIMES: [0.280197, 0.280214, 0.280341, 0.280392, 0.280401, 0.280467, 0.280494, 0.280684, 0.280760] +ITERS: 9 +SIZE: 10000 +BATCHTIME: 2.523950e+00 +SELFTIMED: 2.804015e-01 +[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,]'#( ) diff --git a/microbench/tail_recursion/InsertionSortTailCallOptimized.out b/microbench/tail_recursion/InsertionSortTailCallOptimized.out new file mode 100644 index 000000000..89b49f570 --- /dev/null +++ b/microbench/tail_recursion/InsertionSortTailCallOptimized.out @@ -0,0 +1,48 @@ +Rust config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Eager promotion is enabled. +Burning is enabled. +Compaction is enabled. +INFO_TABLE: [[], [], [], [], [], [], []] + +C config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generational GC is disabled. +Eager promotion is enabled. +Simple write barrier is disabled. +Nursery size=4194304 +Max chunk size=65500 +Initial chunk size=512 + +Number of threads: 1 +Nursery info: start=0x7feec2e33010, end=0x7feec3233010, alloc=0x7feec3233010, size=4194304 + +itertime: 0.202794 +itertime: 0.180252 +itertime: 0.180488 +itertime: 0.180183 +itertime: 0.180441 +itertime: 0.181584 +itertime: 0.181123 +itertime: 0.180655 +itertime: 0.180376 +ITER TIMES: [0.180183, 0.180252, 0.180376, 0.180441, 0.180488, 0.180655, 0.181123, 0.181584, 0.202794] +ITERS: 9 +SIZE: 10000 +BATCHTIME: 1.647896e+00 +SELFTIMED: 1.804878e-01 +itertime: 0.243563 +itertime: 0.242841 +itertime: 0.242861 +itertime: 0.243026 +itertime: 0.243106 +itertime: 0.242515 +itertime: 0.243032 +itertime: 0.243076 +itertime: 0.243190 +ITER TIMES: [0.242515, 0.242841, 0.242861, 0.243026, 0.243032, 0.243076, 0.243106, 0.243190, 0.243563] +ITERS: 9 +SIZE: 10000 +BATCHTIME: 2.187210e+00 +SELFTIMED: 2.430322e-01 +[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,]'#( ) diff --git a/microbench/tail_recursion/InsertionTailCallOpt.exe b/microbench/tail_recursion/InsertionTailCallOpt.exe new file mode 100755 index 000000000..c27c0bfac Binary files /dev/null and b/microbench/tail_recursion/InsertionTailCallOpt.exe differ diff --git a/microbench/tail_recursion/InsertionTailCallOpt.s b/microbench/tail_recursion/InsertionTailCallOpt.s new file mode 100644 index 000000000..a799490ae --- /dev/null +++ b/microbench/tail_recursion/InsertionTailCallOpt.s @@ -0,0 +1,3755 @@ + +InsertionTailCallOpt.exe: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: +_init(): + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 3f 00 00 mov 0x3fd1(%rip),%rax # 404fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 : + 401020: ff 35 ca 3f 00 00 push 0x3fca(%rip) # 404ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 3f 00 00 jmp *0x3fcc(%rip) # 404ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401030 : + 401030: ff 25 ca 3f 00 00 jmp *0x3fca(%rip) # 405000 + 401036: 68 00 00 00 00 push $0x0 + 40103b: e9 e0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401040 : + 401040: ff 25 c2 3f 00 00 jmp *0x3fc2(%rip) # 405008 + 401046: 68 01 00 00 00 push $0x1 + 40104b: e9 d0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401050 : + 401050: ff 25 ba 3f 00 00 jmp *0x3fba(%rip) # 405010 + 401056: 68 02 00 00 00 push $0x2 + 40105b: e9 c0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401060 : + 401060: ff 25 b2 3f 00 00 jmp *0x3fb2(%rip) # 405018 + 401066: 68 03 00 00 00 push $0x3 + 40106b: e9 b0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401070 : + 401070: ff 25 aa 3f 00 00 jmp *0x3faa(%rip) # 405020 + 401076: 68 04 00 00 00 push $0x4 + 40107b: e9 a0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401080 : + 401080: ff 25 a2 3f 00 00 jmp *0x3fa2(%rip) # 405028 + 401086: 68 05 00 00 00 push $0x5 + 40108b: e9 90 ff ff ff jmp 401020 <_init+0x20> + +0000000000401090 : + 401090: ff 25 9a 3f 00 00 jmp *0x3f9a(%rip) # 405030 + 401096: 68 06 00 00 00 push $0x6 + 40109b: e9 80 ff ff ff jmp 401020 <_init+0x20> + +00000000004010a0 : + 4010a0: ff 25 92 3f 00 00 jmp *0x3f92(%rip) # 405038 + 4010a6: 68 07 00 00 00 push $0x7 + 4010ab: e9 70 ff ff ff jmp 401020 <_init+0x20> + +00000000004010b0 : + 4010b0: ff 25 8a 3f 00 00 jmp *0x3f8a(%rip) # 405040 + 4010b6: 68 08 00 00 00 push $0x8 + 4010bb: e9 60 ff ff ff jmp 401020 <_init+0x20> + +00000000004010c0 : + 4010c0: ff 25 82 3f 00 00 jmp *0x3f82(%rip) # 405048 + 4010c6: 68 09 00 00 00 push $0x9 + 4010cb: e9 50 ff ff ff jmp 401020 <_init+0x20> + +00000000004010d0 : + 4010d0: ff 25 7a 3f 00 00 jmp *0x3f7a(%rip) # 405050 + 4010d6: 68 0a 00 00 00 push $0xa + 4010db: e9 40 ff ff ff jmp 401020 <_init+0x20> + +00000000004010e0 <__assert_fail@plt>: + 4010e0: ff 25 72 3f 00 00 jmp *0x3f72(%rip) # 405058 <__assert_fail@GLIBC_2.2.5> + 4010e6: 68 0b 00 00 00 push $0xb + 4010eb: e9 30 ff ff ff jmp 401020 <_init+0x20> + +00000000004010f0 : + 4010f0: ff 25 6a 3f 00 00 jmp *0x3f6a(%rip) # 405060 + 4010f6: 68 0c 00 00 00 push $0xc + 4010fb: e9 20 ff ff ff jmp 401020 <_init+0x20> + +0000000000401100 : + 401100: ff 25 62 3f 00 00 jmp *0x3f62(%rip) # 405068 + 401106: 68 0d 00 00 00 push $0xd + 40110b: e9 10 ff ff ff jmp 401020 <_init+0x20> + +0000000000401110 : + 401110: ff 25 5a 3f 00 00 jmp *0x3f5a(%rip) # 405070 + 401116: 68 0e 00 00 00 push $0xe + 40111b: e9 00 ff ff ff jmp 401020 <_init+0x20> + +0000000000401120 : + 401120: ff 25 52 3f 00 00 jmp *0x3f52(%rip) # 405078 + 401126: 68 0f 00 00 00 push $0xf + 40112b: e9 f0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401130 : + 401130: ff 25 4a 3f 00 00 jmp *0x3f4a(%rip) # 405080 + 401136: 68 10 00 00 00 push $0x10 + 40113b: e9 e0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401140 : + 401140: ff 25 42 3f 00 00 jmp *0x3f42(%rip) # 405088 + 401146: 68 11 00 00 00 push $0x11 + 40114b: e9 d0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401150 : + 401150: ff 25 3a 3f 00 00 jmp *0x3f3a(%rip) # 405090 + 401156: 68 12 00 00 00 push $0x12 + 40115b: e9 c0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401160 : + 401160: ff 25 32 3f 00 00 jmp *0x3f32(%rip) # 405098 + 401166: 68 13 00 00 00 push $0x13 + 40116b: e9 b0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401170 : + 401170: ff 25 2a 3f 00 00 jmp *0x3f2a(%rip) # 4050a0 + 401176: 68 14 00 00 00 push $0x14 + 40117b: e9 a0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401180 : + 401180: ff 25 22 3f 00 00 jmp *0x3f22(%rip) # 4050a8 + 401186: 68 15 00 00 00 push $0x15 + 40118b: e9 90 fe ff ff jmp 401020 <_init+0x20> + +0000000000401190 : + 401190: ff 25 1a 3f 00 00 jmp *0x3f1a(%rip) # 4050b0 + 401196: 68 16 00 00 00 push $0x16 + 40119b: e9 80 fe ff ff jmp 401020 <_init+0x20> + +00000000004011a0 : + 4011a0: ff 25 12 3f 00 00 jmp *0x3f12(%rip) # 4050b8 + 4011a6: 68 17 00 00 00 push $0x17 + 4011ab: e9 70 fe ff ff jmp 401020 <_init+0x20> + +00000000004011b0 : + 4011b0: ff 25 0a 3f 00 00 jmp *0x3f0a(%rip) # 4050c0 + 4011b6: 68 18 00 00 00 push $0x18 + 4011bb: e9 60 fe ff ff jmp 401020 <_init+0x20> + +00000000004011c0 : + 4011c0: ff 25 02 3f 00 00 jmp *0x3f02(%rip) # 4050c8 + 4011c6: 68 19 00 00 00 push $0x19 + 4011cb: e9 50 fe ff ff jmp 401020 <_init+0x20> + +00000000004011d0 : + 4011d0: ff 25 fa 3e 00 00 jmp *0x3efa(%rip) # 4050d0 + 4011d6: 68 1a 00 00 00 push $0x1a + 4011db: e9 40 fe ff ff jmp 401020 <_init+0x20> + +Disassembly of section .text: + +00000000004011e0
: +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:405 + return tailapp_1228; + } + } +} +int main(int argc, char **argv) +{ + 4011e0: 41 57 push %r15 + 4011e2: 41 56 push %r14 + 4011e4: 41 55 push %r13 + 4011e6: 41 54 push %r12 + 4011e8: 55 push %rbp + 4011e9: 53 push %rbx + 4011ea: 89 fb mov %edi,%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1029 + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + +void gib_print_gc_config(void) { + printf("Rust config\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); + 4011ec: bf f0 34 40 00 mov $0x4034f0,%edi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:405 + 4011f1: 48 81 ec 88 00 00 00 sub $0x88,%rsp + 4011f8: 48 89 74 24 18 mov %rsi,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1029 + 4011fd: e8 7e fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1030 + fflush(stdout); + 401202: 48 8b 3d 17 3f 00 00 mov 0x3f17(%rip),%rdi # 405120 + 401209: e8 62 ff ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1031 + gib_print_rust_gc_config(); + 40120e: e8 3d ff ff ff call 401150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1032 + fflush(stdout); + 401213: 48 8b 3d 06 3f 00 00 mov 0x3f06(%rip),%rdi # 405120 + 40121a: e8 51 ff ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1033 + printf("\n"); + 40121f: bf 0a 00 00 00 mov $0xa,%edi + 401224: e8 17 fe ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1036 + + + printf("C config\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); + 401229: bf 28 35 40 00 mov $0x403528,%edi + 40122e: e8 4d fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1040 + +#if defined _GIBBON_GENGC && _GIBBON_GENGC == 0 + #pragma message "Generational GC is disabled." + printf("Generational GC is disabled.\n"); + 401233: bf 43 37 40 00 mov $0x403743,%edi + 401238: e8 43 fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1051 +#if defined _GIBBON_EAGER_PROMOTION && _GIBBON_EAGER_PROMOTION == 0 + #pragma message "Eager promotion is disabled." + printf("Eager promotion is disabled.\n"); +#else + #pragma message "Eager promotion is enabled." + printf("Eager promotion is enabled.\n"); + 40123d: bf 60 37 40 00 mov $0x403760,%edi + 401242: e8 39 fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1056 +#endif + +#if defined _GIBBON_SIMPLE_WRITE_BARRIER && _GIBBON_SIMPLE_WRITE_BARRIER == 0 + #pragma message "Simple write barrier is disabled." + printf("Simple write barrier is disabled.\n"); + 401247: bf 60 35 40 00 mov $0x403560,%edi + 40124c: e8 2f fe ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1062 +#else + #pragma message "Simple write barrier is enabled." + printf("Simple write barrier is enabled.\n"); +#endif + + printf("Nursery size=%zu\n", (size_t) gib_nursery_size); + 401251: be 00 00 40 00 mov $0x400000,%esi + 401256: bf 7c 37 40 00 mov $0x40377c,%edi + 40125b: 31 c0 xor %eax,%eax + 40125d: e8 5e fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1063 + printf("Max chunk size=%zu\n", (size_t) GIB_MAX_CHUNK_SIZE); + 401262: be dc ff 00 00 mov $0xffdc,%esi + 401267: bf 8e 37 40 00 mov $0x40378e,%edi + 40126c: 31 c0 xor %eax,%eax + 40126e: e8 4d fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1064 + printf("Initial chunk size=%zu\n", (size_t) GIB_INIT_CHUNK_SIZE); + 401273: be 00 02 00 00 mov $0x200,%esi + 401278: bf a2 37 40 00 mov $0x4037a2,%edi + 40127d: 31 c0 xor %eax,%eax + 40127f: e8 3c fe ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1065 + printf("\n"); + 401284: bf 0a 00 00 00 mov $0xa,%edi + 401289: e8 b2 fd ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1900 + // Print the GC configuration. + gib_print_gc_config(); +#endif + + // Ensure that C and Rust agree on sizes of structs that cross the boundary. + gib_check_rust_struct_sizes(); + 40128e: e8 9d 1a 00 00 call 402d30 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1909 + // num iterations: How many times to repeat a benchmark. + // tree size: An integer passes to `build_tree()`. + + struct rlimit lim; + int code; + if ( (code = getrlimit(RLIMIT_STACK, &lim)) ) { + 401293: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 401298: bf 03 00 00 00 mov $0x3,%edi + 40129d: e8 2e ff ff ff call 4011d0 + 4012a2: 89 44 24 10 mov %eax,0x10(%rsp) + 4012a6: 85 c0 test %eax,%eax + 4012a8: 0f 85 df 0c 00 00 jne 401f8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1914 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + exit(1); + } + + lim.rlim_cur = 4 * 1024LU * 1024LU * 1024LU; // 1GB stack. + 4012ae: 48 b8 00 00 00 00 01 movabs $0x100000000,%rax + 4012b5: 00 00 00 + 4012b8: 48 89 44 24 70 mov %rax,0x70(%rsp) + 4012bd: eb 32 jmp 4012f1 + 4012bf: 90 nop +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1922 + + // WARNING: Haven't yet figured out why this doesn't work on MacOS... +#ifndef __APPLE__ + code = setrlimit(RLIMIT_STACK, &lim); + while (code) { + fprintf(stderr, " [gibbon rts] Failed to set stack size to %lu, code %d\n", + 4012c0: 48 8b 54 24 70 mov 0x70(%rsp),%rdx + 4012c5: 48 8b 3d 74 3e 00 00 mov 0x3e74(%rip),%rdi # 405140 + 4012cc: be b8 35 40 00 mov $0x4035b8,%esi + 4012d1: 31 c0 xor %eax,%eax + 4012d3: e8 58 fe ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1924 + (uint64_t)lim.rlim_cur, code); + lim.rlim_cur /= 2; + 4012d8: 48 8b 44 24 70 mov 0x70(%rsp),%rax + 4012dd: 48 d1 e8 shr $1,%rax + 4012e0: 48 89 44 24 70 mov %rax,0x70(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1926 + // lim.rlim_max /= 2; + if(lim.rlim_cur < 100 * 1024) { + 4012e5: 48 3d ff 8f 01 00 cmp $0x18fff,%rax + 4012eb: 0f 86 ca 02 00 00 jbe 4015bb +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1920 + code = setrlimit(RLIMIT_STACK, &lim); + 4012f1: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 4012f6: bf 03 00 00 00 mov $0x3,%edi + 4012fb: e8 80 fe ff ff call 401180 + 401300: 89 c1 mov %eax,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1921 + while (code) { + 401302: 85 c0 test %eax,%eax + 401304: 75 ba jne 4012c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 +#endif + + // int got_numargs = argc; // How many numeric arguments have we got. + + int i; + for (i = 1; i < argc; ++i) + 401306: 83 fb 01 cmp $0x1,%ebx + 401309: 0f 8e cc 02 00 00 jle 4015db + 40130f: 48 8b 44 24 18 mov 0x18(%rsp),%rax + 401314: 8d 6b fe lea -0x2(%rbx),%ebp + 401317: 41 be 02 00 00 00 mov $0x2,%r14d + 40131d: 41 bf 01 00 00 00 mov $0x1,%r15d + 401323: 83 e5 fe and $0xfffffffe,%ebp + 401326: 4c 8d 68 10 lea 0x10(%rax),%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + check_args(i, argc, argv, "--array-input-length"); + gib_global_arrayfile_length_param = atoll(argv[i+1]); + i++; + } + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 40132a: 8d 43 ff lea -0x1(%rbx),%eax + 40132d: 83 c5 03 add $0x3,%ebp + 401330: 89 44 24 08 mov %eax,0x8(%rsp) + 401334: eb 4a jmp 401380 + 401336: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40133d: 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 401340: 44 39 7c 24 08 cmp %r15d,0x8(%rsp) + 401345: 0f 8e d5 00 00 00 jle 401420 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40134b: 44 39 f3 cmp %r14d,%ebx + 40134e: 0f 8e be 0b 00 00 jle 401f12 +/usr/include/stdlib.h:376 + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); + 401354: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401358: ba 0a 00 00 00 mov $0xa,%edx + 40135d: 31 f6 xor %esi,%esi + 40135f: e8 bc fd ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1945 + gib_global_biginf_init_chunk_size = atoll(argv[i + 1]); + 401364: 48 89 05 85 3d 00 00 mov %rax,0x3d85(%rip) # 4050f0 + 40136b: 41 83 c7 02 add $0x2,%r15d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 + for (i = 1; i < argc; ++i) + 40136f: 41 83 c6 02 add $0x2,%r14d + 401373: 49 83 c5 10 add $0x10,%r13 + 401377: 41 39 ef cmp %ebp,%r15d + 40137a: 0f 84 5b 02 00 00 je 4015db +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1939 + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + 401380: 4d 8b 45 f8 mov -0x8(%r13),%r8 + 401384: 41 80 38 2d cmpb $0x2d,(%r8) + 401388: 75 12 jne 40139c + 40138a: 41 80 78 01 68 cmpb $0x68,0x1(%r8) + 40138f: 75 0b jne 40139c + 401391: 41 80 78 02 00 cmpb $0x0,0x2(%r8) + 401396: 0f 84 89 01 00 00 je 401525 + 40139c: bf ba 37 40 00 mov $0x4037ba,%edi + 4013a1: b9 07 00 00 00 mov $0x7,%ecx + 4013a6: 4c 89 c6 mov %r8,%rsi + 4013a9: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013ab: 0f 97 c0 seta %al + 4013ae: 1c 00 sbb $0x0,%al + 4013b0: 84 c0 test %al,%al + 4013b2: 0f 84 6d 01 00 00 je 401525 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 4013b8: bf c1 37 40 00 mov $0x4037c1,%edi + 4013bd: b9 15 00 00 00 mov $0x15,%ecx + 4013c2: 4c 89 c6 mov %r8,%rsi + 4013c5: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013c7: 0f 97 c0 seta %al + 4013ca: 1c 00 sbb $0x0,%al + 4013cc: 84 c0 test %al,%al + 4013ce: 0f 84 6c ff ff ff je 401340 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1948 + else if (strcmp(argv[i], "--inf-buffer-size") == 0 && i < argc - 1) { + 4013d4: bf d6 37 40 00 mov $0x4037d6,%edi + 4013d9: b9 12 00 00 00 mov $0x12,%ecx + 4013de: 4c 89 c6 mov %r8,%rsi + 4013e1: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013e3: 0f 97 c0 seta %al + 4013e6: 1c 00 sbb $0x0,%al + 4013e8: 84 c0 test %al,%al + 4013ea: 75 34 jne 401420 + 4013ec: 44 39 7c 24 08 cmp %r15d,0x8(%rsp) + 4013f1: 7e 2d jle 401420 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 4013f3: 44 39 f3 cmp %r14d,%ebx + 4013f6: 0f 8e 82 0b 00 00 jle 401f7e +/usr/include/stdlib.h:376 + 4013fc: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401400: ba 0a 00 00 00 mov $0xa,%edx + 401405: 31 f6 xor %esi,%esi + 401407: e8 14 fd ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1950 + gib_global_inf_init_chunk_size = atoll(argv[i + 1]); + 40140c: 48 89 05 d5 3c 00 00 mov %rax,0x3cd5(%rip) # 4050e8 + 401413: e9 53 ff ff ff jmp 40136b + 401418: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) + 40141f: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1953 + else if ((strcmp(argv[i], "--bench-input") == 0)) { + 401420: bf e8 37 40 00 mov $0x4037e8,%edi + 401425: b9 0e 00 00 00 mov $0xe,%ecx + 40142a: 4c 89 c6 mov %r8,%rsi + 40142d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40142f: 0f 97 c0 seta %al + 401432: 1c 00 sbb $0x0,%al + 401434: 84 c0 test %al,%al + 401436: 75 18 jne 401450 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401438: 44 39 f3 cmp %r14d,%ebx + 40143b: 0f 8f 2a ff ff ff jg 40136b + 401441: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401446: be e8 37 40 00 mov $0x4037e8,%esi + 40144b: e8 10 15 00 00 call 402960 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1958 + else if ((strcmp(argv[i], "--array-input") == 0)) { + 401450: bf f6 37 40 00 mov $0x4037f6,%edi + 401455: b9 0e 00 00 00 mov $0xe,%ecx + 40145a: 4c 89 c6 mov %r8,%rsi + 40145d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40145f: 0f 97 c0 seta %al + 401462: 1c 00 sbb $0x0,%al + 401464: 84 c0 test %al,%al + 401466: 75 18 jne 401480 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401468: 44 39 f3 cmp %r14d,%ebx + 40146b: 0f 8f fa fe ff ff jg 40136b + 401471: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401476: be f6 37 40 00 mov $0x4037f6,%esi + 40147b: e8 e0 14 00 00 call 402960 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1963 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + 401480: bf 04 38 40 00 mov $0x403804,%edi + 401485: b9 15 00 00 00 mov $0x15,%ecx + 40148a: 4c 89 c6 mov %r8,%rsi + 40148d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40148f: 0f 97 c0 seta %al + 401492: 1c 00 sbb $0x0,%al + 401494: 84 c0 test %al,%al + 401496: 75 28 jne 4014c0 + 401498: 44 39 7c 24 08 cmp %r15d,0x8(%rsp) + 40149d: 7e 49 jle 4014e8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40149f: 44 39 f3 cmp %r14d,%ebx + 4014a2: 0f 8e 0d 0b 00 00 jle 401fb5 +/usr/include/stdlib.h:376 + 4014a8: 49 8b 7d 00 mov 0x0(%r13),%rdi + 4014ac: ba 0a 00 00 00 mov $0xa,%edx + 4014b1: 31 f6 xor %esi,%esi + 4014b3: e8 68 fc ff ff call 401120 + 4014b8: e9 ae fe ff ff jmp 40136b + 4014bd: 0f 1f 00 nopl (%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 4014c0: bf 19 38 40 00 mov $0x403819,%edi + 4014c5: b9 0d 00 00 00 mov $0xd,%ecx + 4014ca: 4c 89 c6 mov %r8,%rsi + 4014cd: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4014cf: 0f 97 c0 seta %al + 4014d2: 1c 00 sbb $0x0,%al + 4014d4: 84 c0 test %al,%al + 4014d6: 75 10 jne 4014e8 + 4014d8: 44 39 7c 24 08 cmp %r15d,0x8(%rsp) + 4014dd: 0f 8f 8d 00 00 00 jg 401570 + 4014e3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1975 + int len = strlen(argv[i+1]); + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + strncpy(gib_global_bench_prog_param,argv[i+1],len); + i++; + } + else if ((strcmp(argv[i], "--iterate") == 0)) { + 4014e8: bf 26 38 40 00 mov $0x403826,%edi + 4014ed: b9 0a 00 00 00 mov $0xa,%ecx + 4014f2: 4c 89 c6 mov %r8,%rsi + 4014f5: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4014f7: 0f 97 c0 seta %al + 4014fa: 1c 00 sbb $0x0,%al + 4014fc: 84 c0 test %al,%al + 4014fe: 75 36 jne 401536 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401500: 44 39 f3 cmp %r14d,%ebx + 401503: 0f 8e 66 0a 00 00 jle 401f6f +/usr/include/stdlib.h:376 + 401509: 49 8b 7d 00 mov 0x0(%r13),%rdi + 40150d: ba 0a 00 00 00 mov $0xa,%edx + 401512: 31 f6 xor %esi,%esi + 401514: e8 07 fc ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1977 + check_args(i, argc, argv, "--iterate"); + gib_global_iters_param = atoll(argv[i+1]); + 401519: 48 89 05 d8 3b 00 00 mov %rax,0x3bd8(%rip) # 4050f8 + 401520: e9 46 fe ff ff jmp 40136b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1940 + gib_show_usage(argv); + 401525: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 40152a: e8 71 13 00 00 call 4028a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1941 + exit(0); + 40152f: 31 ff xor %edi,%edi + 401531: e8 7a fc ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1980 + i++; + } + else if ((strcmp(argv[i], "--size-param") == 0)) { + 401536: be 30 38 40 00 mov $0x403830,%esi + 40153b: 4c 89 c7 mov %r8,%rdi + 40153e: e8 cd fb ff ff call 401110 + 401543: 85 c0 test %eax,%eax + 401545: 0f 85 88 0a 00 00 jne 401fd3 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40154b: 44 39 f3 cmp %r14d,%ebx + 40154e: 0f 8e 70 0a 00 00 jle 401fc4 +/usr/include/stdlib.h:376 + 401554: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401558: ba 0a 00 00 00 mov $0xa,%edx + 40155d: 31 f6 xor %esi,%esi + 40155f: e8 bc fb ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1982 + check_args(i, argc, argv, "--size-param"); + gib_global_size_param = atoll(argv[i+1]); + 401564: 48 89 05 95 3b 00 00 mov %rax,0x3b95(%rip) # 405100 + 40156b: e9 fb fd ff ff jmp 40136b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401570: 44 39 f3 cmp %r14d,%ebx + 401573: 0f 8e c7 0a 00 00 jle 402040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1970 + int len = strlen(argv[i+1]); + 401579: 49 8b 75 00 mov 0x0(%r13),%rsi + 40157d: 48 89 f7 mov %rsi,%rdi + 401580: 48 89 74 24 28 mov %rsi,0x28(%rsp) + 401585: e8 26 fb ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 40158a: 8d 78 01 lea 0x1(%rax),%edi + 40158d: 48 89 44 24 20 mov %rax,0x20(%rsp) + 401592: 48 63 ff movslq %edi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401595: e8 c6 fb ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 40159a: 48 8b 54 24 20 mov 0x20(%rsp),%rdx + 40159f: 48 8b 74 24 28 mov 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015a4: 48 89 c7 mov %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 4015a7: 48 89 05 da 3b 00 00 mov %rax,0x3bda(%rip) # 405188 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 4015ae: 48 63 d2 movslq %edx,%rdx + 4015b1: e8 9a fa ff ff call 401050 + 4015b6: e9 b0 fd ff ff jmp 40136b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1927 + fprintf(stderr, " [gibbon rts] Failed setrlimit stack size to something reasonable; giving up.\n"); + 4015bb: ba 4e 00 00 00 mov $0x4e,%edx + 4015c0: be 01 00 00 00 mov $0x1,%esi + 4015c5: bf f0 35 40 00 mov $0x4035f0,%edi + 4015ca: 48 8b 0d 6f 3b 00 00 mov 0x3b6f(%rip),%rcx # 405140 + 4015d1: e8 ea fb ff ff call 4011c0 + 4015d6: e9 2b fd ff ff jmp 401306 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1996 + } + } + + // Initialize gib_global_bench_prog_param to an empty string in case + // the runtime argument --bench-prog isn't passed. + if (gib_global_bench_prog_param == NULL) { + 4015db: 48 83 3d a5 3b 00 00 cmpq $0x0,0x3ba5(%rip) # 405188 + 4015e2: 00 + 4015e3: 0f 84 e1 08 00 00 je 401eca +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2007 +#ifdef _GIBBON_PARALLEL + gib_global_num_threads = __cilkrts_get_nworkers(); +#endif + +#if defined _GIBBON_VERBOSITY && _GIBBON_VERBOSITY >= 2 + printf("Number of threads: %ld\n", gib_global_num_threads); + 4015e9: be 01 00 00 00 mov $0x1,%esi + 4015ee: bf 5d 38 40 00 mov $0x40385d,%edi + 4015f3: 31 c0 xor %eax,%eax + 4015f5: e8 c6 fa ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015fa: bf f0 00 00 00 mov $0xf0,%edi + 4015ff: e8 5c fb ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401604: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401608: 66 0f ef c9 pxor %xmm1,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40160c: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1587 + stats->gc_zct_mgmt_time = 0; + 401611: 48 c7 80 b0 00 00 00 movq $0x0,0xb0(%rax) + 401618: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1594 + stats->rootset_size = 0; + 40161c: 48 c7 80 e8 00 00 00 movq $0x0,0xe8(%rax) + 401623: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401627: 0f 11 00 movups %xmm0,(%rax) + 40162a: 0f 11 40 10 movups %xmm0,0x10(%rax) + 40162e: 0f 11 40 20 movups %xmm0,0x20(%rax) + 401632: 0f 11 40 30 movups %xmm0,0x30(%rax) + 401636: 0f 11 40 40 movups %xmm0,0x40(%rax) + 40163a: 0f 11 40 50 movups %xmm0,0x50(%rax) + 40163e: 0f 11 40 60 movups %xmm0,0x60(%rax) + 401642: 0f 11 40 70 movups %xmm0,0x70(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401646: 0f 11 88 80 00 00 00 movups %xmm1,0x80(%rax) + 40164d: 0f 11 88 90 00 00 00 movups %xmm1,0x90(%rax) + 401654: 0f 11 88 a0 00 00 00 movups %xmm1,0xa0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1588 + stats->fwd_env_size = 0; + 40165b: 0f 11 80 b8 00 00 00 movups %xmm0,0xb8(%rax) + 401662: 0f 11 80 c8 00 00 00 movups %xmm0,0xc8(%rax) + 401669: 0f 11 80 d8 00 00 00 movups %xmm0,0xd8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1338 + gib_global_gc_stats = (GibGcStats *) gib_alloc(sizeof(GibGcStats)); + 401670: 48 89 05 e9 3a 00 00 mov %rax,0x3ae9(%rip) # 405160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401677: e8 e4 fa ff ff call 401160 + 40167c: bf 00 00 40 00 mov $0x400000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1420 + nursery->heap_size = nsize; + 401681: 48 c7 00 00 00 40 00 movq $0x400000,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401688: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1343 + gib_global_nurseries = (GibNursery *) gib_alloc(gib_global_num_threads * + 40168b: 48 89 05 ee 3a 00 00 mov %rax,0x3aee(%rip) # 405180 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401692: e8 c9 fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1421 + nursery->heap_start = (char *) gib_alloc(nsize); + 401697: 48 89 43 08 mov %rax,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40169b: 48 89 c6 mov %rax,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1422 + if (nursery->heap_start == NULL) { + 40169e: 48 85 c0 test %rax,%rax + 4016a1: 0f 84 bc 08 00 00 je 401f63 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4016a7: 48 8d 90 00 00 40 00 lea 0x400000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 4016ae: 41 b8 00 00 40 00 mov $0x400000,%r8d + 4016b4: bf 70 36 40 00 mov $0x403670,%edi + 4016b9: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4016bb: 48 89 53 10 mov %rdx,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 4016bf: 48 89 d1 mov %rdx,%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1428 + nursery->alloc = nursery->heap_end; + 4016c2: 48 89 53 18 mov %rdx,0x18(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1431 + printf("Nursery info: start=%p, end=%p, alloc=%p, size=%zu\n\n", + 4016c6: e8 f5 f9 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016cb: bf 18 00 00 00 mov $0x18,%edi + 4016d0: e8 8b fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4016d5: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016d9: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4016de: 0f 11 40 08 movups %xmm0,0x8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016e2: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1350 + gib_global_oldgen = (GibOldgen *) gib_alloc(sizeof(GibOldgen)); + 4016e5: 48 89 05 7c 3a 00 00 mov %rax,0x3a7c(%rip) # 405168 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016ec: e8 6f fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1457 + oldgen->rem_set = (GibRememberedSet *) gib_alloc(sizeof(GibRememberedSet)); + 4016f1: 48 89 45 00 mov %rax,0x0(%rbp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4016f5: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1458 + if (oldgen->rem_set == NULL) { + 4016f8: 48 85 c0 test %rax,%rax + 4016fb: 0f 84 2b 09 00 00 je 40202c +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401701: bf 00 00 00 06 mov $0x6000000,%edi + 401706: e8 55 fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 40170b: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 40170e: 48 85 c0 test %rax,%rax + 401711: 0f 84 24 09 00 00 je 40203b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401717: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 40171e: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401722: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401727: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40172b: e8 30 fa ff ff call 401160 + 401730: bf 18 00 00 00 mov $0x18,%edi + 401735: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1355 + gib_global_read_shadowstacks = + 401738: 48 89 05 39 3a 00 00 mov %rax,0x3a39(%rip) # 405178 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40173f: e8 1c fa ff ff call 401160 + 401744: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1358 + gib_global_write_shadowstacks = + 401749: 48 89 05 20 3a 00 00 mov %rax,0x3a20(%rip) # 405170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401750: 48 89 c3 mov %rax,%rbx + 401753: e8 08 fa ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401758: 49 89 45 00 mov %rax,0x0(%r13) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 40175c: 48 85 c0 test %rax,%rax + 40175f: 0f 84 d6 08 00 00 je 40203b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401765: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 40176c: 49 89 45 10 mov %rax,0x10(%r13) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401770: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401775: 49 89 55 08 mov %rdx,0x8(%r13) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401779: e8 e2 f9 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 40177e: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401781: 48 85 c0 test %rax,%rax + 401784: 0f 84 b1 08 00 00 je 40203b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40178a: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401791: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + +#ifndef _GIBBON_POINTER + // Initialize the nursery and shadow stack. + gib_storage_initialize(); + GibOldgen *oldgen = DEFAULT_GENERATION; + gib_init_zcts(oldgen); + 401795: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401798: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + gib_init_zcts(oldgen); + 40179c: e8 cf f8 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2017 + + // Minimal test to see if FFI is set up correctly. + gib_check_rust_struct_sizes(); + 4017a1: e8 8a 15 00 00 call 402d30 +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:87 + int error = gib_info_table_initialize(7); + 4017a6: bf 07 00 00 00 mov $0x7,%edi + 4017ab: e8 40 f9 ff ff call 4010f0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:89 + if (error < 0) { + 4017b0: 85 c0 test %eax,%eax + 4017b2: 0f 88 f4 07 00 00 js 401fac +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:96 + gib_info_table_finalize(); + 4017b8: e8 e3 f9 ff ff call 4011a0 +symbol_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:100 + gib_add_symbol(1236, "]"); + 4017bd: be 19 37 40 00 mov $0x403719,%esi + 4017c2: bf d4 04 00 00 mov $0x4d4,%edi + 4017c7: 41 bd 00 00 00 00 mov $0x0,%r13d + 4017cd: e8 be 11 00 00 call 402990 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:101 + gib_add_symbol(1237, "["); + 4017d2: be 0f 37 40 00 mov $0x40370f,%esi + 4017d7: bf d5 04 00 00 mov $0x4d5,%edi + 4017dc: e8 af 11 00 00 call 402990 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:102 + gib_add_symbol(1238, ","); + 4017e1: be 75 38 40 00 mov $0x403875,%esi + 4017e6: bf d6 04 00 00 mov $0x4d6,%edi + 4017eb: e8 a0 11 00 00 call 402990 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:78 + return gib_global_size_param; + 4017f0: 4c 8b 35 09 39 00 00 mov 0x3909(%rip),%r14 # 405100 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:108 + if (fltIf_1019_1066) { + 4017f7: 4d 85 f6 test %r14,%r14 + 4017fa: 4d 0f 49 ee cmovns %r14,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:415 + + GibInt n_42_859_1054 = gib_get_size_param(); + GibInt n_100_892_961_1055 = gib_get_size_param(); + GibInt n__103_894_963_1057 = maxInt(n_100_892_961_1055, 0); + GibInt tmp_19 = sizeof(GibInt); + GibVector *vec_104_895_964_1058 = gib_vector_alloc(n__103_894_963_1057, + 4017fe: 4c 89 ef mov %r13,%rdi + 401801: e8 2a 0f 00 00 call 402730 + 401806: 48 89 c5 mov %rax,%rbp +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 401809: 4d 85 f6 test %r14,%r14 + 40180c: 7e 13 jle 401821 + 40180e: 4c 89 f1 mov %r14,%rcx + 401811: 4c 89 ea mov %r13,%rdx + 401814: 31 f6 xor %esi,%esi + 401816: 48 89 c7 mov %rax,%rdi + 401819: e8 02 0b 00 00 call 402320 + 40181e: 48 89 c5 mov %rax,%rbp +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:420 + tmp_19); + GibVector *vec1_105_896_965_1059 = + generate_loop_544_803(vec_104_895_964_1058, 0, n__103_894_963_1057, n_42_859_1054); + GibVector *timed_1232; + GibVector *times_12 = gib_vector_alloc(gib_get_iters_param(), + 401821: 48 8b 3d d0 38 00 00 mov 0x38d0(%rip),%rdi # 4050f8 + 401828: e8 03 0f 00 00 call 402730 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + sizeof(double)); + struct timespec begin_timed_1232; + struct timespec end_timed_1232; + + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 40182d: 48 83 3d c3 38 00 00 cmpq $0x0,0x38c3(%rip) # 4050f8 + 401834: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:420 + GibVector *times_12 = gib_vector_alloc(gib_get_iters_param(), + 401835: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 401838: 0f 8e d1 01 00 00 jle 401a0f + 40183e: 31 db xor %ebx,%ebx + 401840: e9 a9 00 00 00 jmp 4018ee +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401845: 48 8b 45 00 mov 0x0(%rbp),%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 401849: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 40184d: 4c 89 ff mov %r15,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401850: 4c 01 e0 add %r12,%rax + 401853: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 401858: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 40185c: 4c 89 e2 mov %r12,%rdx + 40185f: e8 fc 09 00 00 call 402260 + 401864: 49 89 c4 mov %rax,%r12 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:436 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1232); + + GibVector *tailapp_1229 = isort1_533_796(vec1_105_896_965_1059); + + timed_1232 = tailapp_1229; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_1232); + 401867: 48 8d 74 24 60 lea 0x60(%rsp),%rsi + 40186c: bf 04 00 00 00 mov $0x4,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401871: 4c 8d 7c 24 50 lea 0x50(%rsp),%r15 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:436 + 401876: e8 25 f8 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40187b: 48 8b 44 24 68 mov 0x68(%rsp),%rax + 401880: 66 0f ef c0 pxor %xmm0,%xmm0 + 401884: 48 2b 44 24 78 sub 0x78(%rsp),%rax + 401889: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 40188e: 66 0f ef c9 pxor %xmm1,%xmm1 + 401892: 48 8b 44 24 60 mov 0x60(%rsp),%rax + 401897: 48 2b 44 24 70 sub 0x70(%rsp),%rax + 40189c: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:445 + } + + double itertime_9 = gib_difftimespecs(&begin_timed_1232, + &end_timed_1232); + + printf("itertime: %lf\n", itertime_9); + 4018a1: bf 77 38 40 00 mov $0x403877,%edi + 4018a6: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 4018ab: f2 0f 5e 05 45 20 00 divsd 0x2045(%rip),%xmm0 # 4038f8 <__PRETTY_FUNCTION__.3+0x28> + 4018b2: 00 + 4018b3: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:442 + double itertime_9 = gib_difftimespecs(&begin_timed_1232, + 4018b7: f2 0f 11 44 24 50 movsd %xmm0,0x50(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:445 + printf("itertime: %lf\n", itertime_9); + 4018bd: e8 fe f7 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018c2: 49 8b 7d 00 mov 0x0(%r13),%rdi + 4018c6: 49 8b 55 10 mov 0x10(%r13),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018ca: 4c 89 fe mov %r15,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018cd: 48 01 df add %rbx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:426 + gib_get_iters_param(); iters_timed_1232++) { + 4018d0: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4018d4: 48 0f af fa imul %rdx,%rdi + 4018d8: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018dc: e8 5f f8 ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:425 + for (long long iters_timed_1232 = 0; iters_timed_1232 < + 4018e1: 48 3b 1d 10 38 00 00 cmp 0x3810(%rip),%rbx # 4050f8 + 4018e8: 0f 8d 21 01 00 00 jge 401a0f +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:431 + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1232); + 4018ee: 48 8d 74 24 70 lea 0x70(%rsp),%rsi + 4018f3: bf 04 00 00 00 mov $0x4,%edi + 4018f8: 41 be 00 00 00 00 mov $0x0,%r14d + 4018fe: e8 9d f7 ff ff call 4010a0 +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:195 + GibInt n_56_931_1109 = gib_vector_length(xs_54_930_1107); + 401903: 48 8b 45 00 mov 0x0(%rbp),%rax +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401907: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40190b: bf 20 00 00 00 mov $0x20,%edi +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:200 + GibInt hd_57_932_1112 = *tmp_3; + 401910: 48 8b 4d 18 mov 0x18(%rbp),%rcx + 401914: 4c 8b 65 08 mov 0x8(%rbp),%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401918: 48 0f af d0 imul %rax,%rdx + 40191c: 49 29 c4 sub %rax,%r12 + 40191f: 4d 0f 49 f4 cmovns %r12,%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:200 + 401923: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401927: 48 89 54 24 08 mov %rdx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40192c: e8 2f f8 ff ff call 401160 + 401931: 49 89 c7 mov %rax,%r15 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 401934: 48 85 c0 test %rax,%rax + 401937: 0f 84 04 06 00 00 je 401f41 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 40193d: 4a 8d 3c f5 00 00 00 lea 0x0(,%r14,8),%rdi + 401944: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401945: e8 16 f8 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 40194a: 48 85 c0 test %rax,%rax + 40194d: 0f 84 ce 05 00 00 je 401f21 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 401953: 49 c7 07 00 00 00 00 movq $0x0,(%r15) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 40195a: 4d 89 77 08 mov %r14,0x8(%r15) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 40195e: 49 c7 47 10 08 00 00 movq $0x8,0x10(%r15) + 401965: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 401966: 49 89 47 18 mov %rax,0x18(%r15) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 40196a: 4d 85 e4 test %r12,%r12 + 40196d: 7e 49 jle 4019b8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40196f: 48 8b 54 24 08 mov 0x8(%rsp),%rdx + 401974: 48 89 10 mov %rdx,(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 401977: 49 83 fc 01 cmp $0x1,%r12 + 40197b: 74 3b je 4019b8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 40197d: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 401981: 49 83 fc 02 cmp $0x2,%r12 + 401985: 74 31 je 4019b8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 401987: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 40198b: 49 83 fc 03 cmp $0x3,%r12 + 40198f: 74 27 je 4019b8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 401991: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + 401995: 49 83 fc 04 cmp $0x4,%r12 + 401999: 74 1d je 4019b8 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 40199b: 48 89 50 20 mov %rdx,0x20(%rax) +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 40199f: 48 89 d1 mov %rdx,%rcx + 4019a2: 4c 89 ff mov %r15,%rdi + 4019a5: 4c 89 f2 mov %r14,%rdx + 4019a8: be 05 00 00 00 mov $0x5,%esi + 4019ad: e8 ae 07 00 00 call 402160 + 4019b2: 49 89 c7 mov %rax,%r15 + 4019b5: 0f 1f 00 nopl (%rax) +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4019b8: 48 8b 55 08 mov 0x8(%rbp),%rdx + 4019bc: 48 2b 55 00 sub 0x0(%rbp),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 4019c0: 49 89 ec mov %rbp,%r12 + 4019c3: 48 83 fa 01 cmp $0x1,%rdx + 4019c7: 0f 8e 9a fe ff ff jle 401867 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4019cd: 49 89 d6 mov %rdx,%r14 +isort1_533_796(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:208 + GibInt fltAppE_1029_1121 = fltPrm_1030_1120 - 1; + 4019d0: 4c 8d 62 ff lea -0x1(%rdx),%r12 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4019d4: 49 83 ee 02 sub $0x2,%r14 + 4019d8: 0f 84 67 fe ff ff je 401845 + 4019de: 48 83 ea 03 sub $0x3,%rdx + 4019e2: 0f 85 fb 04 00 00 jne 401ee3 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4019e8: 48 8b 45 00 mov 0x0(%rbp),%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 4019ec: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 4019f0: 4c 89 ff mov %r15,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4019f3: 4c 01 f0 add %r14,%rax + 4019f6: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 4019fb: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 4019ff: 4c 89 f2 mov %r14,%rdx + 401a02: e8 59 08 00 00 call 402260 + 401a07: 49 89 c7 mov %rax,%r15 + 401a0a: e9 36 fe ff ff jmp 401845 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401a0f: 49 8b 55 10 mov 0x10(%r13),%rdx + 401a13: 49 8b 7d 00 mov 0x0(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401a17: b9 40 21 40 00 mov $0x402140,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401a1c: 49 8b 75 08 mov 0x8(%r13),%rsi + 401a20: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a23: 48 0f af fa imul %rdx,%rdi + 401a27: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401a2b: e8 60 f6 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:450 + gib_vector_inplace_update(times_12, iters_timed_1232, &itertime_9); + } + gib_vector_inplace_sort(times_12, gib_compare_doubles); + + double *tmp_13 = (double *) gib_vector_nth(times_12, gib_get_iters_param() / + 401a30: 48 8b 05 c1 36 00 00 mov 0x36c1(%rip),%rax # 4050f8 + 401a37: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a3d: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401a41: 49 8b 75 10 mov 0x10(%r13),%rsi + 401a45: 49 8b 4d 18 mov 0x18(%r13),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:450 + 401a49: 48 99 cqto + 401a4b: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401a4e: 49 8b 55 08 mov 0x8(%r13),%rdx + 401a52: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401a55: 48 01 f8 add %rdi,%rax + 401a58: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:452 + 2); + double selftimed_11 = *tmp_13; + 401a5c: f2 0f 10 0c 01 movsd (%rcx,%rax,1),%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a61: 48 85 d2 test %rdx,%rdx + 401a64: 0f 8e 95 04 00 00 jle 401eff + 401a6a: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401a6e: 66 0f ef d2 pxor %xmm2,%xmm2 + 401a72: f2 0f 11 54 24 20 movsd %xmm2,0x20(%rsp) + 401a78: 66 0f 28 c2 movapd %xmm2,%xmm0 + 401a7c: 48 8d 04 39 lea (%rcx,%rdi,1),%rax + 401a80: 89 d1 mov %edx,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a82: 31 d2 xor %edx,%edx + 401a84: 0f 1f 40 00 nopl 0x0(%rax) + 401a88: 83 c2 01 add $0x1,%edx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401a8b: f2 0f 58 00 addsd (%rax),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401a8f: 48 01 f0 add %rsi,%rax + 401a92: 39 ca cmp %ecx,%edx + 401a94: 75 f2 jne 401a88 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:455 + double batchtime_10 = gib_sum_timing_array(times_12); + + gib_print_timing_array(times_12); + 401a96: 4c 89 ef mov %r13,%rdi + 401a99: f2 0f 11 4c 24 08 movsd %xmm1,0x8(%rsp) + 401a9f: f2 0f 11 44 24 18 movsd %xmm0,0x18(%rsp) + 401aa5: e8 56 0d 00 00 call 402800 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401aaa: 49 8b 7d 18 mov 0x18(%r13),%rdi + 401aae: e8 7d f5 ff ff call 401030 + 401ab3: 4c 89 ef mov %r13,%rdi + 401ab6: e8 75 f5 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:457 + gib_vector_free(times_12); + printf("ITERS: %ld\n", gib_get_iters_param()); + 401abb: 48 8b 35 36 36 00 00 mov 0x3636(%rip),%rsi # 4050f8 + 401ac2: bf 86 38 40 00 mov $0x403886,%edi + 401ac7: 31 c0 xor %eax,%eax + 401ac9: e8 f2 f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:458 + printf("SIZE: %ld\n", gib_get_size_param()); + 401ace: 48 8b 35 2b 36 00 00 mov 0x362b(%rip),%rsi # 405100 + 401ad5: bf 92 38 40 00 mov $0x403892,%edi + 401ada: 31 c0 xor %eax,%eax + 401adc: e8 df f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:459 + printf("BATCHTIME: %e\n", batchtime_10); + 401ae1: f2 0f 10 44 24 18 movsd 0x18(%rsp),%xmm0 + 401ae7: bf 9d 38 40 00 mov $0x40389d,%edi + 401aec: b8 01 00 00 00 mov $0x1,%eax + 401af1: e8 ca f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:460 + printf("SELFTIMED: %e\n", selftimed_11); + 401af6: f2 0f 10 4c 24 08 movsd 0x8(%rsp),%xmm1 + 401afc: bf ac 38 40 00 mov $0x4038ac,%edi + 401b01: b8 01 00 00 00 mov $0x1,%eax + 401b06: 66 0f 28 c1 movapd %xmm1,%xmm0 + 401b0a: e8 b1 f5 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:463 + + GibVector *timed_1233; + GibVector *times_17 = gib_vector_alloc(gib_get_iters_param(), + 401b0f: 48 8b 3d e2 35 00 00 mov 0x35e2(%rip),%rdi # 4050f8 + 401b16: e8 15 0c 00 00 call 402730 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + sizeof(double)); + struct timespec begin_timed_1233; + struct timespec end_timed_1233; + + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401b1b: 48 83 3d d5 35 00 00 cmpq $0x0,0x35d5(%rip) # 4050f8 + 401b22: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:463 + GibVector *times_17 = gib_vector_alloc(gib_get_iters_param(), + 401b23: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401b26: 0f 8e c9 01 00 00 jle 401cf5 + 401b2c: 48 c7 44 24 08 00 00 movq $0x0,0x8(%rsp) + 401b33: 00 00 + 401b35: 4c 8d 7c 24 50 lea 0x50(%rsp),%r15 + 401b3a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:474 + gib_get_iters_param(); iters_timed_1233++) { + if (iters_timed_1233 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_1233); + 401b40: bf 04 00 00 00 mov $0x4,%edi + 401b45: 4c 89 fe mov %r15,%rsi + 401b48: 41 be 00 00 00 00 mov $0x0,%r14d + 401b4e: e8 4d f5 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401b53: 48 8b 5d 08 mov 0x8(%rbp),%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401b57: bf 20 00 00 00 mov $0x20,%edi + 401b5c: 48 2b 5d 00 sub 0x0(%rbp),%rbx + 401b60: 4c 0f 49 f3 cmovns %rbx,%r14 + 401b64: e8 f7 f5 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 401b69: 48 85 c0 test %rax,%rax + 401b6c: 0f 84 cf 03 00 00 je 401f41 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 401b72: 4a 8d 3c f5 00 00 00 lea 0x0(,%r14,8),%rdi + 401b79: 00 + 401b7a: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401b7f: e8 dc f5 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 401b84: 4c 8b 44 24 18 mov 0x18(%rsp),%r8 + 401b89: 48 85 c0 test %rax,%rax + 401b8c: 0f 84 8f 03 00 00 je 401f21 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 401b92: 49 c7 00 00 00 00 00 movq $0x0,(%r8) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 401b99: 4d 89 70 08 mov %r14,0x8(%r8) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 401b9d: 49 c7 40 10 08 00 00 movq $0x8,0x10(%r8) + 401ba4: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 401ba5: 49 89 40 18 mov %rax,0x18(%r8) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401ba9: 48 85 db test %rbx,%rbx + 401bac: 0f 8e 96 00 00 00 jle 401c48 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401bb2: 48 8b 55 10 mov 0x10(%rbp),%rdx + 401bb6: 48 0f af 55 00 imul 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401bbb: 48 8b 4d 18 mov 0x18(%rbp),%rcx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401bbf: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401bc3: 48 89 10 mov %rdx,(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401bc6: 48 83 fb 01 cmp $0x1,%rbx + 401bca: 0f 84 97 00 00 00 je 401c67 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401bd0: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401bd4: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401bd8: 48 83 c2 01 add $0x1,%rdx + 401bdc: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401be1: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401be5: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401be9: 48 83 fb 02 cmp $0x2,%rbx + 401bed: 74 59 je 401c48 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401bef: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401bf3: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401bf7: 48 83 c2 02 add $0x2,%rdx + 401bfb: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401c00: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401c04: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401c08: 48 83 fb 03 cmp $0x3,%rbx + 401c0c: 74 3a je 401c48 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401c0e: 48 8b 55 00 mov 0x0(%rbp),%rdx +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 401c12: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401c16: 48 83 c2 03 add $0x3,%rdx + 401c1a: 48 0f af 55 10 imul 0x10(%rbp),%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401c1f: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401c23: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 401c27: 48 83 fb 04 cmp $0x4,%rbx + 401c2b: 74 1b je 401c48 + 401c2d: 4c 89 c7 mov %r8,%rdi + 401c30: 48 89 e9 mov %rbp,%rcx + 401c33: 4c 89 f2 mov %r14,%rdx + 401c36: be 04 00 00 00 mov $0x4,%esi + 401c3b: e8 e0 07 00 00 call 402420 + 401c40: 49 89 c0 mov %rax,%r8 + 401c43: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401c48: 41 be 01 00 00 00 mov $0x1,%r14d + 401c4e: 66 90 xchg %ax,%ax +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + 401c50: 4c 89 c6 mov %r8,%rsi + 401c53: 4c 89 f7 mov %r14,%rdi +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + GibInt fltAppE_1047_1179 = i_82_951_1174 + 1; + 401c56: 49 83 c6 01 add $0x1,%r14 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:341 + 401c5a: e8 51 0a 00 00 call 4026b0 + 401c5f: 49 89 c0 mov %rax,%r8 +go_538_810(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:336 + if (fltIf_1046_1177) { + 401c62: 49 39 de cmp %rbx,%r14 + 401c65: 75 e9 jne 401c50 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:479 + + GibVector *tailapp_1230 = isort2_534_797(vec1_105_896_965_1059); + + timed_1233 = tailapp_1230; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_1233); + 401c67: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401c6c: bf 04 00 00 00 mov $0x4,%edi + 401c71: e8 2a f4 ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 401c76: 48 8b 44 24 48 mov 0x48(%rsp),%rax + 401c7b: 66 0f ef c0 pxor %xmm0,%xmm0 + 401c7f: 48 2b 44 24 58 sub 0x58(%rsp),%rax + 401c84: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 401c89: 66 0f ef c9 pxor %xmm1,%xmm1 + 401c8d: 48 8b 44 24 40 mov 0x40(%rsp),%rax + 401c92: 48 2b 44 24 50 sub 0x50(%rsp),%rax + 401c97: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:488 + } + + double itertime_14 = gib_difftimespecs(&begin_timed_1233, + &end_timed_1233); + + printf("itertime: %lf\n", itertime_14); + 401c9c: bf 77 38 40 00 mov $0x403877,%edi + 401ca1: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 401ca6: f2 0f 5e 05 4a 1c 00 divsd 0x1c4a(%rip),%xmm0 # 4038f8 <__PRETTY_FUNCTION__.3+0x28> + 401cad: 00 + 401cae: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:485 + double itertime_14 = gib_difftimespecs(&begin_timed_1233, + 401cb2: f2 0f 11 44 24 38 movsd %xmm0,0x38(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:488 + printf("itertime: %lf\n", itertime_14); + 401cb8: e8 03 f4 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401cbd: 48 8b 5c 24 08 mov 0x8(%rsp),%rbx + 401cc2: 49 8b 7d 00 mov 0x0(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401cc6: 48 8d 74 24 38 lea 0x38(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ccb: 49 8b 55 10 mov 0x10(%r13),%rdx + 401ccf: 48 01 df add %rbx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:469 + gib_get_iters_param(); iters_timed_1233++) { + 401cd2: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401cd6: 48 0f af fa imul %rdx,%rdi + 401cda: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401cde: e8 5d f4 ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401ce3: 48 3b 1d 0e 34 00 00 cmp 0x340e(%rip),%rbx # 4050f8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:469 + gib_get_iters_param(); iters_timed_1233++) { + 401cea: 48 89 5c 24 08 mov %rbx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:468 + for (long long iters_timed_1233 = 0; iters_timed_1233 < + 401cef: 0f 8c 4b fe ff ff jl 401b40 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401cf5: 49 8b 55 10 mov 0x10(%r13),%rdx + 401cf9: 49 8b 7d 00 mov 0x0(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401cfd: b9 40 21 40 00 mov $0x402140,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401d02: 49 8b 75 08 mov 0x8(%r13),%rsi + 401d06: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d09: 48 0f af fa imul %rdx,%rdi + 401d0d: 49 03 7d 18 add 0x18(%r13),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 401d11: e8 7a f3 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:493 + gib_vector_inplace_update(times_17, iters_timed_1233, &itertime_14); + } + gib_vector_inplace_sort(times_17, gib_compare_doubles); + + double *tmp_18 = (double *) gib_vector_nth(times_17, gib_get_iters_param() / + 401d16: 48 8b 05 db 33 00 00 mov 0x33db(%rip),%rax # 4050f8 + 401d1d: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d23: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401d27: 49 8b 75 10 mov 0x10(%r13),%rsi + 401d2b: 49 8b 4d 18 mov 0x18(%r13),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:493 + 401d2f: 48 99 cqto + 401d31: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401d34: 49 8b 55 08 mov 0x8(%r13),%rdx + 401d38: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401d3b: 48 01 f8 add %rdi,%rax + 401d3e: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:495 + 2); + double selftimed_16 = *tmp_18; + 401d42: f2 0f 10 0c 01 movsd (%rcx,%rax,1),%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401d47: 48 85 d2 test %rdx,%rdx + 401d4a: 0f 8e a6 01 00 00 jle 401ef6 + 401d50: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401d54: 66 0f ef c0 pxor %xmm0,%xmm0 + 401d58: 48 8d 04 39 lea (%rcx,%rdi,1),%rax + 401d5c: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401d60: 83 44 24 10 01 addl $0x1,0x10(%rsp) + 401d65: 8b 5c 24 10 mov 0x10(%rsp),%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401d69: f2 0f 58 00 addsd (%rax),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401d6d: 48 01 f0 add %rsi,%rax + 401d70: 39 d3 cmp %edx,%ebx + 401d72: 75 ec jne 401d60 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:498 + double batchtime_15 = gib_sum_timing_array(times_17); + + gib_print_timing_array(times_17); + 401d74: 4c 89 ef mov %r13,%rdi + 401d77: f2 0f 11 4c 24 08 movsd %xmm1,0x8(%rsp) +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 401d7d: 31 db xor %ebx,%ebx + 401d7f: f2 0f 11 44 24 10 movsd %xmm0,0x10(%rsp) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:498 + gib_print_timing_array(times_17); + 401d85: e8 76 0a 00 00 call 402800 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401d8a: 49 8b 7d 18 mov 0x18(%r13),%rdi + 401d8e: e8 9d f2 ff ff call 401030 + 401d93: 4c 89 ef mov %r13,%rdi + 401d96: e8 95 f2 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:500 + gib_vector_free(times_17); + printf("ITERS: %ld\n", gib_get_iters_param()); + 401d9b: 48 8b 35 56 33 00 00 mov 0x3356(%rip),%rsi # 4050f8 + 401da2: bf 86 38 40 00 mov $0x403886,%edi + 401da7: 31 c0 xor %eax,%eax + 401da9: e8 12 f3 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:501 + printf("SIZE: %ld\n", gib_get_size_param()); + 401dae: 48 8b 35 4b 33 00 00 mov 0x334b(%rip),%rsi # 405100 + 401db5: bf 92 38 40 00 mov $0x403892,%edi + 401dba: 31 c0 xor %eax,%eax + 401dbc: e8 ff f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:502 + printf("BATCHTIME: %e\n", batchtime_15); + 401dc1: f2 0f 10 44 24 10 movsd 0x10(%rsp),%xmm0 + 401dc7: bf 9d 38 40 00 mov $0x40389d,%edi + 401dcc: b8 01 00 00 00 mov $0x1,%eax + 401dd1: e8 ea f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:503 + printf("SELFTIMED: %e\n", selftimed_16); + 401dd6: f2 0f 10 4c 24 08 movsd 0x8(%rsp),%xmm1 + 401ddc: bf ac 38 40 00 mov $0x4038ac,%edi + 401de1: b8 01 00 00 00 mov $0x1,%eax + 401de6: 66 0f 28 c1 movapd %xmm1,%xmm0 + 401dea: e8 d1 f2 ff ff call 4010c0 +printVec_535_799(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:116 + unsigned char wildcard__178_109_900_1070 = gib_print_symbol(1237); + 401def: bf d5 04 00 00 mov $0x4d5,%edi + 401df4: e8 67 10 00 00 call 402e60 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401df9: 49 8b 6c 24 08 mov 0x8(%r12),%rbp +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 401dfe: 49 2b 2c 24 sub (%r12),%rbp + 401e02: 74 39 je 401e3d + 401e04: 0f 1f 40 00 nopl 0x0(%rax) +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e08: 49 8b 04 24 mov (%r12),%rax +printVec_loop_545_802(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:137 + GibInt i_47_891_973_1083 = *tmp_0; + 401e0c: 49 8b 54 24 18 mov 0x18(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 401e11: bf 3c 37 40 00 mov $0x40373c,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401e16: 48 01 d8 add %rbx,%rax + 401e19: 49 0f af 44 24 10 imul 0x10(%r12),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:141 + GibInt fltAppE_1022_1086 = idx_160_908_1079 + 1; + 401e1f: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:138 + unsigned char wildcard__187_165_911_1084 = printf("%ld", + 401e23: 48 8b 34 02 mov (%rdx,%rax,1),%rsi + 401e27: 31 c0 xor %eax,%eax + 401e29: e8 92 f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:140 + unsigned char wildcard__184_166_912_1085 = gib_print_symbol(1238); + 401e2e: bf d6 04 00 00 mov $0x4d6,%edi + 401e33: e8 28 10 00 00 call 402e60 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:130 + if (fltIf_1021_1082) { + 401e38: 48 39 eb cmp %rbp,%rbx + 401e3b: 75 cb jne 401e08 +printVec_535_799(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:120 + unsigned char wildcard__173_111_902_1073 = gib_print_symbol(1236); + 401e3d: bf d4 04 00 00 mov $0x4d4,%edi + 401e42: e8 19 10 00 00 call 402e60 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:507 + + unsigned char wildcard__33_48_863_1063 = printVec_535_799(timed_1232); + + printf("'#("); + 401e47: bf bb 38 40 00 mov $0x4038bb,%edi + 401e4c: 31 c0 xor %eax,%eax + 401e4e: e8 6d f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:508 + printf(""); + 401e53: bf bf 38 40 00 mov $0x4038bf,%edi + 401e58: 31 c0 xor %eax,%eax + 401e5a: e8 61 f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:509 + printf(" "); + 401e5f: bf 20 00 00 00 mov $0x20,%edi + 401e64: e8 d7 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:510 + printf(""); + 401e69: bf bf 38 40 00 mov $0x4038bf,%edi + 401e6e: 31 c0 xor %eax,%eax + 401e70: e8 4b f2 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:511 + printf(")"); + 401e75: bf 29 00 00 00 mov $0x29,%edi + 401e7a: e8 c1 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:512 + printf("\n"); + 401e7f: bf 0a 00 00 00 mov $0xa,%edi + 401e84: e8 b7 f1 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 401e89: 48 8b 3d f8 32 00 00 mov 0x32f8(%rip),%rdi # 405188 + 401e90: e8 9b f1 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2042 + GibShadowstack *rstack = DEFAULT_READ_SHADOWSTACK; + GibShadowstack *wstack = DEFAULT_WRITE_SHADOWSTACK; + GibOldgen *oldgen = DEFAULT_GENERATION; + + // Free all objects initialized by the Rust RTS. + gib_gc_cleanup(rstack, wstack, nursery, oldgen); + 401e95: 48 8b 0d cc 32 00 00 mov 0x32cc(%rip),%rcx # 405168 + 401e9c: 48 8b 15 dd 32 00 00 mov 0x32dd(%rip),%rdx # 405180 + 401ea3: 48 8b 35 c6 32 00 00 mov 0x32c6(%rip),%rsi # 405170 + 401eaa: 48 8b 3d c7 32 00 00 mov 0x32c7(%rip),%rdi # 405178 + 401eb1: e8 1a f2 ff ff call 4010d0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:517 + + int exit_21 = gib_exit(); + + return exit_21; + 401eb6: 48 81 c4 88 00 00 00 add $0x88,%rsp + 401ebd: 31 c0 xor %eax,%eax + 401ebf: 5b pop %rbx + 401ec0: 5d pop %rbp + 401ec1: 41 5c pop %r12 + 401ec3: 41 5d pop %r13 + 401ec5: 41 5e pop %r14 + 401ec7: 41 5f pop %r15 + 401ec9: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401eca: bf 01 00 00 00 mov $0x1,%edi + 401ecf: e8 8c f2 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1997 + gib_global_bench_prog_param = (char*) gib_alloc(1*sizeof(char)); + 401ed4: 48 89 05 ad 32 00 00 mov %rax,0x32ad(%rip) # 405188 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + *gib_global_bench_prog_param = '\n'; + 401edb: c6 00 0a movb $0xa,(%rax) + 401ede: e9 06 f7 ff ff jmp 4015e9 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + 401ee3: 4c 89 fe mov %r15,%rsi + 401ee6: 48 89 ef mov %rbp,%rdi + 401ee9: e8 62 06 00 00 call 402550 + 401eee: 49 89 c7 mov %rax,%r15 + 401ef1: e9 f2 fa ff ff jmp 4019e8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401ef6: 66 0f ef c0 pxor %xmm0,%xmm0 + 401efa: e9 75 fe ff ff jmp 401d74 + 401eff: 66 0f ef db pxor %xmm3,%xmm3 + 401f03: f2 0f 11 5c 24 20 movsd %xmm3,0x20(%rsp) + 401f09: 66 0f 28 c3 movapd %xmm3,%xmm0 + 401f0d: e9 84 fb ff ff jmp 401a96 + 401f12: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401f17: be c1 37 40 00 mov $0x4037c1,%esi + 401f1c: e8 3f 0a 00 00 call 402960 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 401f21: 48 8b 3d 18 32 00 00 mov 0x3218(%rip),%rdi # 405140 + 401f28: ba 08 00 00 00 mov $0x8,%edx + 401f2d: be 08 30 40 00 mov $0x403008,%esi + 401f32: e8 f9 f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 401f37: bf 01 00 00 00 mov $0x1,%edi + 401f3c: e8 6f f2 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 401f41: ba 20 00 00 00 mov $0x20,%edx + 401f46: be 08 30 40 00 mov $0x403008,%esi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 401f4b: 48 8b 3d ee 31 00 00 mov 0x31ee(%rip),%rdi # 405140 + 401f52: 31 c0 xor %eax,%eax + 401f54: e8 d7 f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1461 + exit(1); + 401f59: bf 01 00 00 00 mov $0x1,%edi + 401f5e: e8 4d f2 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1423 + fprintf(stderr, "gib_nursery_initialize: gib_alloc failed: %zu", + 401f63: ba 00 00 40 00 mov $0x400000,%edx + 401f68: be 40 36 40 00 mov $0x403640,%esi + 401f6d: eb dc jmp 401f4b + 401f6f: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401f74: be 26 38 40 00 mov $0x403826,%esi + 401f79: e8 e2 09 00 00 call 402960 + 401f7e: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401f83: be d6 37 40 00 mov $0x4037d6,%esi + 401f88: e8 d3 09 00 00 call 402960 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1910 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + 401f8d: 89 c2 mov %eax,%edx + 401f8f: be 88 35 40 00 mov $0x403588,%esi +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:90 + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + 401f94: 48 8b 3d a5 31 00 00 mov 0x31a5(%rip),%rdi # 405140 + 401f9b: 31 c0 xor %eax,%eax + 401f9d: e8 8e f1 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:91 + exit(1); + 401fa2: bf 01 00 00 00 mov $0x1,%edi + 401fa7: e8 04 f2 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:90 + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + 401fac: 89 c2 mov %eax,%edx + 401fae: be d8 36 40 00 mov $0x4036d8,%esi + 401fb3: eb df jmp 401f94 + 401fb5: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401fba: be 04 38 40 00 mov $0x403804,%esi + 401fbf: e8 9c 09 00 00 call 402960 + 401fc4: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 401fc9: be 30 38 40 00 mov $0x403830,%esi + 401fce: e8 8d 09 00 00 call 402960 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1987 + fprintf(stderr, "Extra arguments left over: "); + 401fd3: 48 8b 0d 66 31 00 00 mov 0x3166(%rip),%rcx # 405140 + 401fda: ba 1b 00 00 00 mov $0x1b,%edx + 401fdf: be 01 00 00 00 mov $0x1,%esi + 401fe4: 4d 63 ff movslq %r15d,%r15 + 401fe7: bf 3d 38 40 00 mov $0x40383d,%edi + 401fec: e8 cf f1 ff ff call 4011c0 + 401ff1: eb 20 jmp 402013 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1988 + for(; i < argc; i++) fprintf(stderr, "%s ", argv[i]); + 401ff3: 48 8b 44 24 18 mov 0x18(%rsp),%rax + 401ff8: 48 8b 3d 41 31 00 00 mov 0x3141(%rip),%rdi # 405140 + 401fff: be 59 38 40 00 mov $0x403859,%esi + 402004: 4a 8b 14 f8 mov (%rax,%r15,8),%rdx + 402008: 31 c0 xor %eax,%eax + 40200a: 49 83 c7 01 add $0x1,%r15 + 40200e: e8 1d f1 ff ff call 401130 + 402013: 44 39 fb cmp %r15d,%ebx + 402016: 7f db jg 401ff3 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1989 + gib_show_usage(argv); + 402018: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 40201d: e8 7e 08 00 00 call 4028a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1990 + exit(1); + 402022: bf 01 00 00 00 mov $0x1,%edi + 402027: e8 84 f1 ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 40202c: ba 18 00 00 00 mov $0x18,%edx + 402031: be a8 36 40 00 mov $0x4036a8,%esi + 402036: e9 10 ff ff ff jmp 401f4b + 40203b: e8 90 07 00 00 call 4027d0 + 402040: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi + 402045: be 19 38 40 00 mov $0x403819,%esi + 40204a: e8 11 09 00 00 call 402960 +main(): + 40204f: 90 nop + +0000000000402050 <_start>: +_start(): + 402050: f3 0f 1e fa endbr64 + 402054: 31 ed xor %ebp,%ebp + 402056: 49 89 d1 mov %rdx,%r9 + 402059: 5e pop %rsi + 40205a: 48 89 e2 mov %rsp,%rdx + 40205d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 402061: 50 push %rax + 402062: 54 push %rsp + 402063: 45 31 c0 xor %r8d,%r8d + 402066: 31 c9 xor %ecx,%ecx + 402068: 48 c7 c7 e0 11 40 00 mov $0x4011e0,%rdi + 40206f: ff 15 63 2f 00 00 call *0x2f63(%rip) # 404fd8 <__libc_start_main@GLIBC_2.34> + 402075: f4 hlt + 402076: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40207d: 00 00 00 + +0000000000402080 <_dl_relocate_static_pie>: +_dl_relocate_static_pie(): + 402080: f3 0f 1e fa endbr64 + 402084: c3 ret + 402085: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40208c: 00 00 00 + 40208f: 90 nop + +0000000000402090 : +deregister_tm_clones(): + 402090: b8 08 51 40 00 mov $0x405108,%eax + 402095: 48 3d 08 51 40 00 cmp $0x405108,%rax + 40209b: 74 13 je 4020b0 + 40209d: b8 00 00 00 00 mov $0x0,%eax + 4020a2: 48 85 c0 test %rax,%rax + 4020a5: 74 09 je 4020b0 + 4020a7: bf 08 51 40 00 mov $0x405108,%edi + 4020ac: ff e0 jmp *%rax + 4020ae: 66 90 xchg %ax,%ax + 4020b0: c3 ret + 4020b1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4020b8: 00 00 00 00 + 4020bc: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004020c0 : +register_tm_clones(): + 4020c0: be 08 51 40 00 mov $0x405108,%esi + 4020c5: 48 81 ee 08 51 40 00 sub $0x405108,%rsi + 4020cc: 48 89 f0 mov %rsi,%rax + 4020cf: 48 c1 ee 3f shr $0x3f,%rsi + 4020d3: 48 c1 f8 03 sar $0x3,%rax + 4020d7: 48 01 c6 add %rax,%rsi + 4020da: 48 d1 fe sar $1,%rsi + 4020dd: 74 11 je 4020f0 + 4020df: b8 00 00 00 00 mov $0x0,%eax + 4020e4: 48 85 c0 test %rax,%rax + 4020e7: 74 07 je 4020f0 + 4020e9: bf 08 51 40 00 mov $0x405108,%edi + 4020ee: ff e0 jmp *%rax + 4020f0: c3 ret + 4020f1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4020f8: 00 00 00 00 + 4020fc: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402100 <__do_global_dtors_aux>: +__do_global_dtors_aux(): + 402100: 80 3d 41 30 00 00 00 cmpb $0x0,0x3041(%rip) # 405148 + 402107: 75 17 jne 402120 <__do_global_dtors_aux+0x20> + 402109: 55 push %rbp + 40210a: 48 89 e5 mov %rsp,%rbp + 40210d: e8 7e ff ff ff call 402090 + 402112: c6 05 2f 30 00 00 01 movb $0x1,0x302f(%rip) # 405148 + 402119: 5d pop %rbp + 40211a: c3 ret + 40211b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + 402120: c3 ret + 402121: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402128: 00 00 00 00 + 40212c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402130 : +frame_dummy(): + 402130: eb 8e jmp 4020c0 + 402132: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 402139: 00 00 00 + 40213c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402140 : +gib_compare_doubles(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1835 + return (*da > *db) - (*da < *db); + 402140: f2 0f 10 07 movsd (%rdi),%xmm0 + 402144: f2 0f 10 0e movsd (%rsi),%xmm1 + 402148: 31 c0 xor %eax,%eax + 40214a: 66 0f 2f c1 comisd %xmm1,%xmm0 + 40214e: 0f 97 c0 seta %al + 402151: 31 d2 xor %edx,%edx + 402153: 66 0f 2f c8 comisd %xmm0,%xmm1 + 402157: 0f 97 c2 seta %dl + 40215a: 29 d0 sub %edx,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1836 +} + 40215c: c3 ret + 40215d: 0f 1f 00 nopl (%rax) + +0000000000402160 : +generate_loop_544_808(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:217 +{ + 402160: 41 56 push %r14 + 402162: 41 55 push %r13 + 402164: 41 54 push %r12 + 402166: 49 89 fc mov %rdi,%r12 + 402169: 53 push %rbx + 40216a: 48 83 ec 38 sub $0x38,%rsp + 40216e: 48 89 4c 24 08 mov %rcx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 402173: 48 39 d6 cmp %rdx,%rsi + 402176: 75 18 jne 402190 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:232 +} + 402178: 48 83 c4 38 add $0x38,%rsp + 40217c: 4c 89 e0 mov %r12,%rax + 40217f: 5b pop %rbx + 402180: 41 5c pop %r12 + 402182: 41 5d pop %r13 + 402184: 41 5e pop %r14 + 402186: c3 ret + 402187: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 40218e: 00 00 + 402190: 49 89 d5 mov %rdx,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402193: 48 8b 57 10 mov 0x10(%rdi),%rdx + 402197: 48 8b 3f mov (%rdi),%rdi + 40219a: 48 89 f3 mov %rsi,%rbx + 40219d: 48 01 f7 add %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021a0: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021a5: 48 0f af fa imul %rdx,%rdi + 4021a9: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021ae: e8 8d ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 4021b3: 4c 8b 74 24 08 mov 0x8(%rsp),%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 4021b8: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:227 + GibVector *tailapp_1221 = + 4021bc: 4c 89 74 24 18 mov %r14,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 4021c1: 49 39 fd cmp %rdi,%r13 + 4021c4: 74 b2 je 402178 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021c6: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4021cb: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021cf: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021d4: 48 0f af fa imul %rdx,%rdi + 4021d8: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021dd: e8 5e ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 4021e2: 48 8d 7b 02 lea 0x2(%rbx),%rdi + 4021e6: 4c 89 74 24 20 mov %r14,0x20(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 4021eb: 49 39 fd cmp %rdi,%r13 + 4021ee: 74 88 je 402178 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021f0: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4021f5: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4021f9: 48 8d 74 24 20 lea 0x20(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4021fe: 48 0f af fa imul %rdx,%rdi + 402202: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402207: e8 34 ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 40220c: 48 8d 7b 03 lea 0x3(%rbx),%rdi + 402210: 4c 89 74 24 28 mov %r14,0x28(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:220 + if (fltIf_1031_1126) { + 402215: 49 39 fd cmp %rdi,%r13 + 402218: 0f 84 5a ff ff ff je 402178 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40221e: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402223: 49 03 3c 24 add (%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402227: 48 8d 74 24 28 lea 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40222c: 48 0f af fa imul %rdx,%rdi + 402230: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402235: e8 06 ef ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 40223a: 4c 89 e7 mov %r12,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:226 + GibInt fltAppE_1033_1131 = idx_255_935_1123 + 1; + 40223d: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:228 + generate_loop_544_808(vec1_259_938_1130, fltAppE_1033_1131, end_256_936_1124, hd_57_937_1125); + 402241: 4c 89 f1 mov %r14,%rcx + 402244: 4c 89 ea mov %r13,%rdx + 402247: e8 14 ff ff ff call 402160 + 40224c: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:230 + return tailapp_1221; + 40224f: e9 24 ff ff ff jmp 402178 + 402254: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 40225b: 00 00 00 00 + 40225f: 90 nop + +0000000000402260 : +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:264 +{ + 402260: 41 55 push %r13 + 402262: 41 54 push %r12 + 402264: 55 push %rbp + 402265: 48 89 fd mov %rdi,%rbp + 402268: 48 83 ec 20 sub $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40226c: 48 8b 7f 18 mov 0x18(%rdi),%rdi + 402270: 4c 8b 45 10 mov 0x10(%rbp),%r8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:264 + 402274: 48 89 74 24 08 mov %rsi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402279: 48 8b 45 00 mov 0x0(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:267 + if (fltIf_1038_1147) { + 40227d: 48 85 d2 test %rdx,%rdx + 402280: 74 6e je 4022f0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:273 + GibInt i_98_883_996_1152 = n_70_946_1146 - 1; + 402282: 4c 8d 62 ff lea -0x1(%rdx),%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402286: 48 01 c2 add %rax,%rdx + 402289: 49 89 f5 mov %rsi,%r13 + 40228c: 49 0f af d0 imul %r8,%rdx + 402290: 49 8d 0c 04 lea (%r12,%rax,1),%rcx + 402294: 49 0f af c8 imul %r8,%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + GibInt y_72_947_1153 = *tmp_5; + 402298: 48 8b 0c 0f mov (%rdi,%rcx,1),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40229c: 48 01 d7 add %rdx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40229f: 4c 89 c2 mov %r8,%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + 4022a2: 48 89 4c 24 18 mov %rcx,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:282 + if (fltIf_1041_1156) { + 4022a7: 48 39 f1 cmp %rsi,%rcx + 4022aa: 7f 1c jg 4022c8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 4022ac: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 4022b1: e8 8a ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 +} + 4022b6: 48 83 c4 20 add $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 4022ba: 48 89 e8 mov %rbp,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 4022bd: 5d pop %rbp + 4022be: 41 5c pop %r12 + 4022c0: 41 5d pop %r13 + 4022c2: c3 ret + 4022c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 4022c8: 48 8d 74 24 18 lea 0x18(%rsp),%rsi + 4022cd: e8 6e ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 4022d2: 4c 89 e2 mov %r12,%rdx + 4022d5: 4c 89 ee mov %r13,%rsi + 4022d8: 48 89 ef mov %rbp,%rdi + 4022db: e8 80 ff ff ff call 402260 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 +} + 4022e0: 48 83 c4 20 add $0x20,%rsp + 4022e4: 5d pop %rbp + 4022e5: 41 5c pop %r12 + 4022e7: 41 5d pop %r13 + 4022e9: c3 ret + 4022ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4022f0: 49 0f af c0 imul %r8,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4022f4: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 4022f9: 4c 89 c2 mov %r8,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4022fc: 48 01 c7 add %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4022ff: e8 3c ee ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 402304: 48 83 c4 20 add $0x20,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 402308: 48 89 e8 mov %rbp,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:315 + 40230b: 5d pop %rbp + 40230c: 41 5c pop %r12 + 40230e: 41 5d pop %r13 + 402310: c3 ret + 402311: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402318: 00 00 00 00 + 40231c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402320 : +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:148 +GibVector *generate_loop_544_803(GibVector *vec_254_913_1087, + 402320: 41 56 push %r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402322: 4c 8d 71 ff lea -0x1(%rcx),%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:148 +GibVector *generate_loop_544_803(GibVector *vec_254_913_1087, + 402326: 41 55 push %r13 + 402328: 49 89 d5 mov %rdx,%r13 + 40232b: 41 54 push %r12 + 40232d: 49 89 fc mov %rdi,%r12 + 402330: 55 push %rbp + 402331: 48 89 cd mov %rcx,%rbp + 402334: 53 push %rbx + 402335: 48 89 f3 mov %rsi,%rbx + 402338: 48 83 ec 20 sub $0x20,%rsp +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40233c: 49 8b 3c 24 mov (%r12),%rdi + 402340: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402345: 48 89 e8 mov %rbp,%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402348: 48 89 e6 mov %rsp,%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 40234b: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40234e: 48 01 df add %rbx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402351: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402355: 48 0f af fa imul %rdx,%rdi + 402359: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40235e: e8 dd ed ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 402363: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 402367: 49 39 fd cmp %rdi,%r13 + 40236a: 74 30 je 40239c +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40236c: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402371: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402375: 4c 89 f0 mov %r14,%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402378: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 40237d: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402380: 48 0f af fa imul %rdx,%rdi + 402384: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 402389: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40238e: e8 ad ed ff ff call 401140 + 402393: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 402397: 49 39 fd cmp %rdi,%r13 + 40239a: 75 14 jne 4023b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:167 +} + 40239c: 48 83 c4 20 add $0x20,%rsp + 4023a0: 4c 89 e0 mov %r12,%rax + 4023a3: 5b pop %rbx + 4023a4: 5d pop %rbp + 4023a5: 41 5c pop %r12 + 4023a7: 41 5d pop %r13 + 4023a9: 41 5e pop %r14 + 4023ab: c3 ret + 4023ac: 0f 1f 40 00 nopl 0x0(%rax) +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023b0: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4023b5: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 4023b9: 48 8d 45 fe lea -0x2(%rbp),%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023bd: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 4023c2: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023c5: 48 0f af fa imul %rdx,%rdi + 4023c9: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 4023ce: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023d3: e8 68 ed ff ff call 401140 + 4023d8: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 4023dc: 49 39 fd cmp %rdi,%r13 + 4023df: 74 bb je 40239c +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023e1: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4023e6: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 4023ea: 48 8d 45 fd lea -0x3(%rbp),%rax +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4023ee: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_544_803(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + 4023f3: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:161 + GibInt fltAppE_1025_1096 = idx_255_914_1088 + 1; + 4023f6: 48 83 c3 04 add $0x4,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4023fa: 48 0f af fa imul %rdx,%rdi + 4023fe: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:157 + GibInt fltPrm_1024_1094 = n_42_916_1090 - idx_255_914_1088; + 402403: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402408: e8 33 ed ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + if (fltIf_1023_1091) { + 40240d: 49 39 dd cmp %rbx,%r13 + 402410: 74 8a je 40239c + 402412: e9 25 ff ff ff jmp 40233c +generate_loop_544_803.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:154 + 402417: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 40241e: 00 00 + +0000000000402420 : +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:168 +GibVector *generate_loop_544_804(GibVector *vec_254_918_1097, + 402420: 41 55 push %r13 + 402422: 49 89 d5 mov %rdx,%r13 + 402425: 41 54 push %r12 + 402427: 49 89 fc mov %rdi,%r12 + 40242a: 55 push %rbp + 40242b: 48 89 f5 mov %rsi,%rbp + 40242e: 53 push %rbx + 40242f: 48 89 cb mov %rcx,%rbx + 402432: 48 83 ec 28 sub $0x28,%rsp +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402436: 48 8b 03 mov (%rbx),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 402439: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40243d: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402440: 49 8b 3c 24 mov (%r12),%rdi + 402444: 48 01 e8 add %rbp,%rax + 402447: 48 0f af 43 10 imul 0x10(%rbx),%rax + 40244c: 48 01 ef add %rbp,%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 40244f: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402453: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402458: 48 0f af fa imul %rdx,%rdi + 40245c: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 402461: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402465: e8 d6 ec ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 40246a: 48 8d 7d 01 lea 0x1(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 40246e: 49 39 fd cmp %rdi,%r13 + 402471: 74 3d je 4024b0 +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402473: 48 8b 03 mov (%rbx),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 402476: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40247a: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40247f: 48 01 f8 add %rdi,%rax + 402482: 48 0f af 43 10 imul 0x10(%rbx),%rax + 402487: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 40248b: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40248f: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402494: 48 0f af fa imul %rdx,%rdi + 402498: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 40249d: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024a2: e8 99 ec ff ff call 401140 + 4024a7: 48 8d 7d 02 lea 0x2(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 4024ab: 49 39 fd cmp %rdi,%r13 + 4024ae: 75 10 jne 4024c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:192 +} + 4024b0: 48 83 c4 28 add $0x28,%rsp + 4024b4: 4c 89 e0 mov %r12,%rax + 4024b7: 5b pop %rbx + 4024b8: 5d pop %rbp + 4024b9: 41 5c pop %r12 + 4024bb: 41 5d pop %r13 + 4024bd: c3 ret + 4024be: 66 90 xchg %ax,%ax +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024c0: 48 8b 03 mov (%rbx),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 4024c3: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024c7: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024cc: 48 01 f8 add %rdi,%rax + 4024cf: 48 0f af 43 10 imul 0x10(%rbx),%rax + 4024d4: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 4024d8: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4024dc: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4024e1: 48 0f af fa imul %rdx,%rdi + 4024e5: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 4024ea: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4024ef: e8 4c ec ff ff call 401140 + 4024f4: 48 8d 7d 03 lea 0x3(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 4024f8: 49 39 fd cmp %rdi,%r13 + 4024fb: 74 b3 je 4024b0 +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4024fd: 48 8b 03 mov (%rbx),%rax +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 402500: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402504: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:186 + GibInt fltAppE_1028_1106 = idx_255_919_1098 + 1; + 402509: 48 83 c5 04 add $0x4,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40250d: 48 01 f8 add %rdi,%rax + 402510: 48 0f af 43 10 imul 0x10(%rbx),%rax +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402515: 49 03 3c 24 add (%r12),%rdi +generate_loop_544_804(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + GibInt fltPrm_1027_1104 = *tmp_1; + 402519: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40251d: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 402522: 48 0f af fa imul %rdx,%rdi + 402526: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:182 + 40252b: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402530: e8 0b ec ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + if (fltIf_1026_1101) { + 402535: 49 39 ed cmp %rbp,%r13 + 402538: 0f 84 72 ff ff ff je 4024b0 + 40253e: e9 f3 fe ff ff jmp 402436 +generate_loop_544_804.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:175 + 402543: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 40254a: 00 00 00 00 + 40254e: 66 90 xchg %ax,%ax + +0000000000402550 : +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:233 +GibVector *isort_540_807(GibVector *xs_61_939_1132, GibVector *b_62_940_1133, + 402550: 41 57 push %r15 + 402552: 41 56 push %r14 + 402554: 41 55 push %r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:247 + GibInt fltAppE_1036_1139 = n_63_941_1134 - 1; + 402556: 4c 8d 6a ff lea -0x1(%rdx),%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:233 +GibVector *isort_540_807(GibVector *xs_61_939_1132, GibVector *b_62_940_1133, + 40255a: 41 54 push %r12 + 40255c: 49 89 d4 mov %rdx,%r12 + 40255f: 53 push %rbx + 402560: 48 89 fb mov %rdi,%rbx + 402563: 48 83 ec 10 sub $0x10,%rsp + 402567: 48 8b 17 mov (%rdi),%rdx +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 40256a: 48 8b 47 08 mov 0x8(%rdi),%rax + 40256e: 48 29 d0 sub %rdx,%rax +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 402571: 48 83 f8 01 cmp $0x1,%rax + 402575: 0f 8e 05 01 00 00 jle 402680 + 40257b: 49 89 f6 mov %rsi,%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 40257e: 4d 85 ed test %r13,%r13 + 402581: 75 6d jne 4025f0 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402583: 48 83 c2 01 add $0x1,%rdx + 402587: 48 0f af 57 10 imul 0x10(%rdi),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 40258c: 48 8b 47 18 mov 0x18(%rdi),%rax +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402590: 48 8b 4e 18 mov 0x18(%rsi),%rcx + 402594: 48 8b 3e mov (%rsi),%rdi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + 402597: 4c 8b 3c 10 mov (%rax,%rdx,1),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40259b: 48 8b 56 10 mov 0x10(%rsi),%rdx + 40259f: 4c 89 3c 24 mov %r15,(%rsp) + 4025a3: 49 8d 44 3d 00 lea 0x0(%r13,%rdi,1),%rax +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4025a8: 4c 01 e7 add %r12,%rdi + 4025ab: 48 0f af c2 imul %rdx,%rax + 4025af: 48 0f af fa imul %rdx,%rdi +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + GibInt y_72_947_1153 = *tmp_5; + 4025b3: 48 8b 04 01 mov (%rcx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4025b7: 48 01 cf add %rcx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:278 + 4025ba: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:282 + if (fltIf_1041_1156) { + 4025bf: 4c 39 f8 cmp %r15,%rax + 4025c2: 0f 8e a8 00 00 00 jle 402670 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4025c8: 48 8d 74 24 08 lea 0x8(%rsp),%rsi + 4025cd: e8 6e eb ff ff call 401140 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:261 +} + 4025d2: 48 83 c4 10 add $0x10,%rsp +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 4025d6: 4c 89 ea mov %r13,%rdx + 4025d9: 4c 89 fe mov %r15,%rsi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:261 +} + 4025dc: 5b pop %rbx +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 4025dd: 4c 89 f7 mov %r14,%rdi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:261 +} + 4025e0: 41 5c pop %r12 + 4025e2: 41 5d pop %r13 + 4025e4: 41 5e pop %r14 + 4025e6: 41 5f pop %r15 +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:304 + insert_541_809(xs__73_948_1163, x_69_945_1145, fltAppE_1043_1164); + 4025e8: e9 73 fc ff ff jmp 402260 + 4025ed: 0f 1f 00 nopl (%rax) +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:244 + if (fltIf_1035_1138) { + 4025f0: 4d 89 e0 mov %r12,%r8 + 4025f3: 49 83 e8 02 sub $0x2,%r8 + 4025f7: 0f 85 93 00 00 00 jne 402690 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4025fd: 4c 01 ea add %r13,%rdx + 402600: 48 0f af 53 10 imul 0x10(%rbx),%rdx +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 402605: 48 8b 43 18 mov 0x18(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + insert_541_809(xs__66_943_1140, fltAppE_1037_1143, n_63_941_1134); + 402609: 4c 89 f7 mov %r14,%rdi + 40260c: 48 8b 34 10 mov (%rax,%rdx,1),%rsi + 402610: 4c 89 ea mov %r13,%rdx + 402613: e8 48 fc ff ff call 402260 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402618: 48 8b 13 mov (%rbx),%rdx +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40261b: 48 8b 38 mov (%rax),%rdi +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:256 + 40261e: 49 89 c6 mov %rax,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402621: 4c 01 e2 add %r12,%rdx + 402624: 48 0f af 53 10 imul 0x10(%rbx),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + GibInt fltAppE_1037_1143 = *tmp_4; + 402629: 48 8b 43 18 mov 0x18(%rbx),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40262d: 49 8b 4e 18 mov 0x18(%r14),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:254 + 402631: 4c 8b 3c 10 mov (%rax,%rdx,1),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402635: 49 8b 56 10 mov 0x10(%r14),%rdx + 402639: 4c 89 3c 24 mov %r15,(%rsp) +insert_541_809(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:267 + if (fltIf_1038_1147) { + 40263d: 4d 85 e4 test %r12,%r12 + 402640: 0f 85 5d ff ff ff jne 4025a3 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402646: 48 0f af fa imul %rdx,%rdi +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40264a: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40264d: 48 01 cf add %rcx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402650: e8 eb ea ff ff call 401140 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:261 +} + 402655: 48 83 c4 10 add $0x10,%rsp + 402659: 4c 89 f0 mov %r14,%rax + 40265c: 5b pop %rbx + 40265d: 41 5c pop %r12 + 40265f: 41 5d pop %r13 + 402661: 41 5e pop %r14 + 402663: 41 5f pop %r15 + 402665: c3 ret + 402666: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40266d: 00 00 00 +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + 402670: 48 89 e6 mov %rsp,%rsi + 402673: e8 c8 ea ff ff call 401140 +isort_540_807(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:258 + return tailapp_1222; + 402678: eb db jmp 402655 + 40267a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:239 + if (fltIf_1034_1137) { + 402680: 48 89 d7 mov %rdx,%rdi + 402683: 49 89 de mov %rbx,%r14 + 402686: eb 99 jmp 402621 + 402688: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) + 40268f: 00 + 402690: 4c 89 c2 mov %r8,%rdx + 402693: e8 b8 fe ff ff call 402550 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402698: 48 8b 13 mov (%rbx),%rdx + 40269b: 49 89 c6 mov %rax,%r14 + 40269e: e9 5a ff ff ff jmp 4025fd +isort_540_807.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026a3: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4026aa: 00 00 00 00 + 4026ae: 66 90 xchg %ax,%ax + +00000000004026b0 : +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:348 +GibVector *shift_543_811(GibInt j_74_955_1180, GibVector *ys_76_956_1181) + 4026b0: 41 54 push %r12 + 4026b2: 49 89 f4 mov %rsi,%r12 + 4026b5: 53 push %rbx + 4026b6: 48 89 fb mov %rdi,%rbx + 4026b9: 48 83 ec 18 sub $0x18,%rsp +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026bd: 49 8b 04 24 mov (%r12),%rax + 4026c1: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 4026c6: 49 8b 74 24 18 mov 0x18(%r12),%rsi + 4026cb: 48 8d 3c 03 lea (%rbx,%rax,1),%rdi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:360 + GibInt i_98_883_1010_1187 = j_74_955_1180 - 1; + 4026cf: 48 83 eb 01 sub $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026d3: 48 0f af fa imul %rdx,%rdi +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4026d7: 48 01 d8 add %rbx,%rax + 4026da: 48 0f af c2 imul %rdx,%rax + 4026de: 48 01 f7 add %rsi,%rdi +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:359 + GibInt a_78_957_1185 = *tmp_8; + 4026e1: 48 8b 0f mov (%rdi),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:365 + GibInt b_79_958_1188 = *tmp_7; + 4026e4: 48 8b 04 06 mov (%rsi,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:359 + GibInt a_78_957_1185 = *tmp_8; + 4026e8: 48 89 4c 24 08 mov %rcx,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:365 + GibInt b_79_958_1188 = *tmp_7; + 4026ed: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:376 + if (fltIf_1052_1192) { + 4026f1: 48 39 c1 cmp %rax,%rcx + 4026f4: 7f 2c jg 402722 +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4026f6: 48 89 e6 mov %rsp,%rsi + 4026f9: e8 42 ea ff ff call 401140 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4026fe: 49 8b 3c 24 mov (%r12),%rdi + 402702: 49 8b 54 24 10 mov 0x10(%r12),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402707: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40270c: 48 01 df add %rbx,%rdi + 40270f: 48 0f af fa imul %rdx,%rdi + 402713: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402718: e8 23 ea ff ff call 401140 +shift_543_811(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:352 + if (fltIf_1048_1182) { + 40271d: 48 85 db test %rbx,%rbx + 402720: 75 9b jne 4026bd +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:403 +} + 402722: 48 83 c4 18 add $0x18,%rsp + 402726: 4c 89 e0 mov %r12,%rax + 402729: 5b pop %rbx + 40272a: 41 5c pop %r12 + 40272c: c3 ret +shift_543_811.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/Insertion.c:403 + 40272d: 0f 1f 00 nopl (%rax) + +0000000000402730 : +gib_vector_alloc.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 402730: 41 54 push %r12 + 402732: 53 push %rbx + 402733: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402736: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 40273b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40273f: e8 1c ea ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 402744: 48 85 c0 test %rax,%rax + 402747: 74 3b je 402784 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 402749: 48 8d 3c dd 00 00 00 lea 0x0(,%rbx,8),%rdi + 402750: 00 + 402751: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402754: e8 07 ea ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 402759: 48 85 c0 test %rax,%rax + 40275c: 74 48 je 4027a6 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 40275e: 49 89 44 24 18 mov %rax,0x18(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 402763: 4c 89 e0 mov %r12,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 402766: 49 c7 04 24 00 00 00 movq $0x0,(%r12) + 40276d: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 40276e: 49 89 5c 24 08 mov %rbx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 402773: 49 c7 44 24 10 08 00 movq $0x8,0x10(%r12) + 40277a: 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 40277c: 48 83 c4 08 add $0x8,%rsp + 402780: 5b pop %rbx + 402781: 41 5c pop %r12 + 402783: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 402784: 48 8b 3d b5 29 00 00 mov 0x29b5(%rip),%rdi # 405140 + 40278b: ba 20 00 00 00 mov $0x20,%edx + 402790: be 08 30 40 00 mov $0x403008,%esi + 402795: 31 c0 xor %eax,%eax + 402797: e8 94 e9 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 40279c: bf 01 00 00 00 mov $0x1,%edi + 4027a1: e8 0a ea ff ff call 4011b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 4027a6: 48 8b 3d 93 29 00 00 mov 0x2993(%rip),%rdi # 405140 + 4027ad: ba 08 00 00 00 mov $0x8,%edx + 4027b2: be 08 30 40 00 mov $0x403008,%esi + 4027b7: e8 74 e9 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 4027bc: bf 01 00 00 00 mov $0x1,%edi + 4027c1: e8 ea e9 ff ff call 4011b0 + 4027c6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4027cd: 00 00 00 + +00000000004027d0 : +gib_shadowstack_initialize.part.0.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1483 +static void gib_shadowstack_initialize(GibShadowstack* stack, size_t stack_size) + 4027d0: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1487 + fprintf(stderr, "gib_shadowstack_initialize: gib_alloc failed: %zu", + 4027d4: ba 00 00 00 06 mov $0x6000000,%edx + 4027d9: be 30 30 40 00 mov $0x403030,%esi + 4027de: 31 c0 xor %eax,%eax + 4027e0: 48 8b 3d 59 29 00 00 mov 0x2959(%rip),%rdi # 405140 + 4027e7: e8 44 e9 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1489 + exit(1); + 4027ec: bf 01 00 00 00 mov $0x1,%edi + 4027f1: e8 ba e9 ff ff call 4011b0 + 4027f6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4027fd: 00 00 00 + +0000000000402800 : +gib_print_timing_array(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 402800: 41 55 push %r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 402802: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 402804: 49 89 fd mov %rdi,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 402807: bf 03 37 40 00 mov $0x403703,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:673 +void gib_print_timing_array(GibVector *times) { + 40280c: 41 54 push %r12 + 40280e: 55 push %rbp + 40280f: 53 push %rbx + 402810: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 402814: e8 a7 e8 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 402819: 49 8b 45 00 mov 0x0(%r13),%rax + 40281d: 49 8b 6d 08 mov 0x8(%r13),%rbp + 402821: 48 29 c5 sub %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 402824: 48 85 ed test %rbp,%rbp + 402827: 7e 59 jle 402882 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 402829: 4c 8d 65 ff lea -0x1(%rbp),%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 40282d: 31 db xor %ebx,%ebx + 40282f: eb 23 jmp 402854 + 402831: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 402838: bf 14 37 40 00 mov $0x403714,%edi + 40283d: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 402842: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 402846: e8 75 e8 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 40284b: 48 39 eb cmp %rbp,%rbx + 40284e: 74 32 je 402882 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402850: 49 8b 45 00 mov 0x0(%r13),%rax + 402854: 48 01 d8 add %rbx,%rax + 402857: 49 0f af 45 10 imul 0x10(%r13),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 40285c: 49 8b 55 18 mov 0x18(%r13),%rdx + 402860: f2 0f 10 04 02 movsd (%rdx,%rax,1),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 402865: 4c 39 e3 cmp %r12,%rbx + 402868: 75 ce jne 402838 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 40286a: bf 11 37 40 00 mov $0x403711,%edi + 40286f: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 402874: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 402878: e8 43 e8 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 40287d: 48 39 dd cmp %rbx,%rbp + 402880: 75 ce jne 402850 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:688 +} + 402882: 48 83 c4 08 add $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 402886: bf 19 37 40 00 mov $0x403719,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:688 +} + 40288b: 5b pop %rbx + 40288c: 5d pop %rbp + 40288d: 41 5c pop %r12 + 40288f: 41 5d pop %r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 402891: e9 ea e7 ff ff jmp 401080 + 402896: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40289d: 00 00 00 + +00000000004028a0 : +gib_show_usage(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1797 +{ + 4028a0: 53 push %rbx + 4028a1: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1798 + printf("\n"); + 4028a4: bf 0a 00 00 00 mov $0xa,%edi + 4028a9: e8 92 e7 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1799 + printf("This binary was generated by the Gibbon compiler.\n"); + 4028ae: bf 68 30 40 00 mov $0x403068,%edi + 4028b3: e8 c8 e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1800 + printf("\n"); + 4028b8: bf 0a 00 00 00 mov $0xa,%edi + 4028bd: e8 7e e7 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1801 + printf("Usage: %s [OPTIONS...]\n", argv[0]); + 4028c2: 48 8b 33 mov (%rbx),%rsi + 4028c5: bf 1b 37 40 00 mov $0x40371b,%edi + 4028ca: 31 c0 xor %eax,%eax + 4028cc: e8 ef e7 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1803 + printf("\n"); + 4028d1: bf 0a 00 00 00 mov $0xa,%edi + 4028d6: e8 65 e7 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1804 + printf("Options:\n"); + 4028db: bf 33 37 40 00 mov $0x403733,%edi + 4028e0: e8 9b e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1805 + printf(" --biginf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_biginf_init_chunk_size); + 4028e5: 48 8b 35 04 28 00 00 mov 0x2804(%rip),%rsi # 4050f0 + 4028ec: bf a0 30 40 00 mov $0x4030a0,%edi + 4028f1: 31 c0 xor %eax,%eax + 4028f3: e8 c8 e7 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1806 + printf(" --inf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_inf_init_chunk_size); + 4028f8: 48 8b 35 e9 27 00 00 mov 0x27e9(%rip),%rsi # 4050e8 + 4028ff: bf e8 30 40 00 mov $0x4030e8,%edi + 402904: 31 c0 xor %eax,%eax + 402906: e8 b5 e7 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1807 + printf(" --bench-input Set the input file read for benchmarking. Applies only\n"); + 40290b: bf 30 31 40 00 mov $0x403130,%edi + 402910: e8 6b e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1808 + printf(" If the program was *compiled* with --bench-fun. \n"); + 402915: bf 88 31 40 00 mov $0x403188,%edi + 40291a: e8 61 e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1809 + printf("\n"); + 40291f: bf 0a 00 00 00 mov $0xa,%edi + 402924: e8 17 e7 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1810 + printf(" --array-input Set the file from which to read the array input.\n"); + 402929: bf e0 31 40 00 mov $0x4031e0,%edi + 40292e: e8 4d e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1811 + printf(" --array-input-length Set the size of the array input file.\n"); + 402933: bf 38 32 40 00 mov $0x403238,%edi + 402938: e8 43 e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1812 + printf(" --iterate Set the number of timing iterations to perform (default 1).\n"); + 40293d: bf 80 32 40 00 mov $0x403280,%edi + 402942: e8 39 e7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 402947: bf e0 32 40 00 mov $0x4032e0,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1816 +} + 40294c: 5b pop %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 40294d: e9 2e e7 ff ff jmp 401080 + 402952: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402959: 00 00 00 00 + 40295d: 0f 1f 00 nopl (%rax) + +0000000000402960 : +check_args.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 402960: 55 push %rbp + 402961: 48 89 fd mov %rdi,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 402964: 48 8b 3d d5 27 00 00 mov 0x27d5(%rip),%rdi # 405140 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 40296b: 48 89 f2 mov %rsi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 40296e: 31 c0 xor %eax,%eax + 402970: be 78 33 40 00 mov $0x403378,%esi + 402975: e8 b6 e7 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1879 + gib_show_usage(argv); + 40297a: 48 89 ef mov %rbp,%rdi + 40297d: e8 1e ff ff ff call 4028a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1880 + exit(1); + 402982: bf 01 00 00 00 mov $0x1,%edi + 402987: e8 24 e8 ff ff call 4011b0 + 40298c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402990 : +gib_add_symbol(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:411 +{ + 402990: 41 56 push %r14 + 402992: 41 55 push %r13 + 402994: 41 54 push %r12 + 402996: 49 89 fc mov %rdi,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402999: bf 40 01 00 00 mov $0x140,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:411 +{ + 40299e: 55 push %rbp + 40299f: 48 89 f5 mov %rsi,%rbp + 4029a2: 53 push %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4029a3: e8 b8 e7 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 4029a8: 48 89 ee mov %rbp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:414 + s->idx = idx; + 4029ab: 4c 89 20 mov %r12,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 4029ae: 48 8d 78 08 lea 0x8(%rax),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4029b2: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:415 + strcpy(s->value, value); + 4029b5: e8 a6 e6 ff ff call 401060 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + HASH_ADD(hh, global_sym_table, idx, sizeof(GibSym), s); + 4029ba: 4c 89 e0 mov %r12,%rax + 4029bd: 4c 89 e1 mov %r12,%rcx + 4029c0: 48 89 9b 30 01 00 00 mov %rbx,0x130(%rbx) + 4029c7: 48 c1 e8 38 shr $0x38,%rax + 4029cb: 48 c1 e9 30 shr $0x30,%rcx + 4029cf: c7 83 38 01 00 00 08 movl $0x8,0x138(%rbx) + 4029d6: 00 00 00 + 4029d9: 48 89 c2 mov %rax,%rdx + 4029dc: 4c 89 e0 mov %r12,%rax + 4029df: 0f b6 c9 movzbl %cl,%ecx + 4029e2: 48 c1 e8 20 shr $0x20,%rax + 4029e6: c1 e2 18 shl $0x18,%edx + 4029e9: 0f b6 c0 movzbl %al,%eax + 4029ec: c1 e1 10 shl $0x10,%ecx + 4029ef: 8d 94 02 b9 79 37 9e lea -0x61c88647(%rdx,%rax,1),%edx + 4029f6: 8d 04 0a lea (%rdx,%rcx,1),%eax + 4029f9: 4c 89 e1 mov %r12,%rcx + 4029fc: 44 89 e2 mov %r12d,%edx + 4029ff: 48 c1 e9 28 shr $0x28,%rcx + 402a03: 81 e2 ff ff 00 ff and $0xff00ffff,%edx + 402a09: 0f b6 c9 movzbl %cl,%ecx + 402a0c: c1 e1 08 shl $0x8,%ecx + 402a0f: 01 c1 add %eax,%ecx + 402a11: 4c 89 e0 mov %r12,%rax + 402a14: 48 c1 e8 10 shr $0x10,%rax + 402a18: 0f b6 c0 movzbl %al,%eax + 402a1b: c1 e0 10 shl $0x10,%eax + 402a1e: 8d 84 02 c2 ba 49 9f lea -0x60b6453e(%rdx,%rax,1),%eax + 402a25: 29 c8 sub %ecx,%eax + 402a27: 81 c1 09 41 12 01 add $0x1124109,%ecx + 402a2d: 35 6d f7 07 00 xor $0x7f76d,%eax + 402a32: 29 c1 sub %eax,%ecx + 402a34: 89 ca mov %ecx,%edx + 402a36: 89 c1 mov %eax,%ecx + 402a38: c1 e1 08 shl $0x8,%ecx + 402a3b: 31 d1 xor %edx,%ecx + 402a3d: ba f7 be ed fe mov $0xfeedbef7,%edx + 402a42: 29 c2 sub %eax,%edx + 402a44: 29 c8 sub %ecx,%eax + 402a46: 89 d6 mov %edx,%esi + 402a48: 89 ca mov %ecx,%edx + 402a4a: 29 ce sub %ecx,%esi + 402a4c: c1 ea 0d shr $0xd,%edx + 402a4f: 31 f2 xor %esi,%edx + 402a51: 89 d6 mov %edx,%esi + 402a53: 29 d0 sub %edx,%eax + 402a55: 29 d1 sub %edx,%ecx + 402a57: c1 ee 0c shr $0xc,%esi + 402a5a: 31 f0 xor %esi,%eax + 402a5c: 89 ce mov %ecx,%esi + 402a5e: 89 c1 mov %eax,%ecx + 402a60: 29 c6 sub %eax,%esi + 402a62: 29 c2 sub %eax,%edx + 402a64: c1 e1 10 shl $0x10,%ecx + 402a67: 31 f1 xor %esi,%ecx + 402a69: 89 d6 mov %edx,%esi + 402a6b: 89 ca mov %ecx,%edx + 402a6d: 29 ce sub %ecx,%esi + 402a6f: 29 c8 sub %ecx,%eax + 402a71: c1 ea 05 shr $0x5,%edx + 402a74: 31 f2 xor %esi,%edx + 402a76: 89 d6 mov %edx,%esi + 402a78: 29 d0 sub %edx,%eax + 402a7a: 29 d1 sub %edx,%ecx + 402a7c: c1 ee 03 shr $0x3,%esi + 402a7f: 31 f0 xor %esi,%eax + 402a81: 89 c5 mov %eax,%ebp + 402a83: 29 c1 sub %eax,%ecx + 402a85: 29 c2 sub %eax,%edx + 402a87: 48 8b 05 ca 26 00 00 mov 0x26ca(%rip),%rax # 405158 + 402a8e: c1 e5 0a shl $0xa,%ebp + 402a91: 31 e9 xor %ebp,%ecx + 402a93: 29 ca sub %ecx,%edx + 402a95: c1 e9 0f shr $0xf,%ecx + 402a98: 31 d1 xor %edx,%ecx + 402a9a: 89 8b 3c 01 00 00 mov %ecx,0x13c(%rbx) + 402aa0: 89 cd mov %ecx,%ebp + 402aa2: 48 85 c0 test %rax,%rax + 402aa5: 0f 84 a7 01 00 00 je 402c52 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 29) + 402aab: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402ab2: 4c 8d ab 08 01 00 00 lea 0x108(%rbx),%r13 + 402ab9: 48 c7 83 18 01 00 00 movq $0x0,0x118(%rbx) + 402ac0: 00 00 00 00 + 402ac4: 48 89 93 08 01 00 00 mov %rdx,0x108(%rbx) + 402acb: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402ad2: 48 8b 4a 18 mov 0x18(%rdx),%rcx + 402ad6: 48 89 ce mov %rcx,%rsi + 402ad9: 48 2b 72 20 sub 0x20(%rdx),%rsi + 402add: 48 89 b3 10 01 00 00 mov %rsi,0x110(%rbx) + 402ae4: 48 89 59 10 mov %rbx,0x10(%rcx) + 402ae8: 4c 89 6a 18 mov %r13,0x18(%rdx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 37) + 402aec: 48 8b 90 08 01 00 00 mov 0x108(%rax),%rdx + 402af3: 8b 42 08 mov 0x8(%rdx),%eax + 402af6: 83 42 10 01 addl $0x1,0x10(%rdx) + 402afa: 83 e8 01 sub $0x1,%eax + 402afd: 21 e8 and %ebp,%eax + 402aff: 48 c1 e0 04 shl $0x4,%rax + 402b03: 48 03 02 add (%rdx),%rax + 402b06: 8b 78 08 mov 0x8(%rax),%edi + 402b09: 48 8b 08 mov (%rax),%rcx + 402b0c: 8d 57 01 lea 0x1(%rdi),%edx + 402b0f: 89 50 08 mov %edx,0x8(%rax) + 402b12: 48 89 8b 28 01 00 00 mov %rcx,0x128(%rbx) + 402b19: 48 c7 83 20 01 00 00 movq $0x0,0x120(%rbx) + 402b20: 00 00 00 00 + 402b24: 48 85 c9 test %rcx,%rcx + 402b27: 74 04 je 402b2d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 38) + 402b29: 4c 89 69 18 mov %r13,0x18(%rcx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 40) + 402b2d: 4c 89 28 mov %r13,(%rax) + 402b30: 8b 40 0c mov 0xc(%rax),%eax + 402b33: 8d 44 80 05 lea 0x5(%rax,%rax,4),%eax + 402b37: 01 c0 add %eax,%eax + 402b39: 39 c2 cmp %eax,%edx + 402b3b: 72 0d jb 402b4a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 41) + 402b3d: 48 8b ab 08 01 00 00 mov 0x108(%rbx),%rbp + 402b44: 83 7d 34 00 cmpl $0x0,0x34(%rbp) + 402b48: 74 19 je 402b63 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:417 + if (idx > gib_global_gensym_counter) { + 402b4a: 4c 39 25 ff 25 00 00 cmp %r12,0x25ff(%rip) # 405150 + 402b51: 73 07 jae 402b5a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:418 + gib_global_gensym_counter = idx; + 402b53: 4c 89 25 f6 25 00 00 mov %r12,0x25f6(%rip) # 405150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:421 +} + 402b5a: 5b pop %rbx + 402b5b: 5d pop %rbp + 402b5c: 41 5c pop %r12 + 402b5e: 41 5d pop %r13 + 402b60: 41 5e pop %r14 + 402b62: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 42) + HASH_ADD(hh, global_sym_table, idx, sizeof(GibSym), s); + 402b63: 8b 7d 08 mov 0x8(%rbp),%edi + 402b66: be 01 00 00 00 mov $0x1,%esi + 402b6b: 48 c1 e7 05 shl $0x5,%rdi + 402b6f: e8 8c e5 ff ff call 401100 + 402b74: 49 89 c5 mov %rax,%r13 + 402b77: 48 85 c0 test %rax,%rax + 402b7a: 0f 84 a4 01 00 00 je 402d24 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 44) + 402b80: 8b 55 08 mov 0x8(%rbp),%edx + 402b83: 8b 45 10 mov 0x10(%rbp),%eax + 402b86: c7 45 2c 00 00 00 00 movl $0x0,0x2c(%rbp) + 402b8d: 8b 7d 0c mov 0xc(%rbp),%edi + 402b90: 44 8d 44 12 ff lea -0x1(%rdx,%rdx,1),%r8d + 402b95: 8d 4f 01 lea 0x1(%rdi),%ecx + 402b98: 89 c7 mov %eax,%edi + 402b9a: 44 21 c0 and %r8d,%eax + 402b9d: d3 ef shr %cl,%edi + 402b9f: 83 f8 01 cmp $0x1,%eax + 402ba2: 83 df ff sbb $0xffffffff,%edi + 402ba5: 89 7d 28 mov %edi,0x28(%rbp) + 402ba8: 85 d2 test %edx,%edx + 402baa: 0f 84 26 01 00 00 je 402cd6 + 402bb0: 48 8b 45 00 mov 0x0(%rbp),%rax + 402bb4: 44 8d 52 ff lea -0x1(%rdx),%r10d + 402bb8: 49 c1 e2 04 shl $0x4,%r10 + 402bbc: 4c 8d 48 10 lea 0x10(%rax),%r9 + 402bc0: 4d 01 ca add %r9,%r10 + 402bc3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 63) + 402bc8: 48 8b 08 mov (%rax),%rcx + 402bcb: 48 85 c9 test %rcx,%rcx + 402bce: 75 17 jne 402be7 + 402bd0: eb 6b jmp 402c3d + 402bd2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 56) + 402bd8: 48 89 4a 18 mov %rcx,0x18(%rdx) + 402bdc: 48 89 08 mov %rcx,(%rax) + 402bdf: 48 85 f6 test %rsi,%rsi + 402be2: 74 59 je 402c3d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402be4: 48 89 f1 mov %rsi,%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 60) + 402be7: 44 89 c0 mov %r8d,%eax + 402bea: 23 41 34 and 0x34(%rcx),%eax + 402bed: 48 8b 71 20 mov 0x20(%rcx),%rsi + 402bf1: 48 c1 e0 04 shl $0x4,%rax + 402bf5: 4c 01 e8 add %r13,%rax + 402bf8: 8b 50 08 mov 0x8(%rax),%edx + 402bfb: 83 c2 01 add $0x1,%edx + 402bfe: 89 50 08 mov %edx,0x8(%rax) + 402c01: 39 d7 cmp %edx,%edi + 402c03: 73 1c jae 402c21 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 51) + 402c05: 44 8b 58 0c mov 0xc(%rax),%r11d + 402c09: 41 89 fe mov %edi,%r14d + 402c0c: 83 45 2c 01 addl $0x1,0x2c(%rbp) + 402c10: 45 0f af f3 imul %r11d,%r14d + 402c14: 44 39 f2 cmp %r14d,%edx + 402c17: 76 08 jbe 402c21 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 53) + 402c19: 41 83 c3 01 add $0x1,%r11d + 402c1d: 44 89 58 0c mov %r11d,0xc(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 55) + 402c21: 48 8b 10 mov (%rax),%rdx + 402c24: 48 c7 41 18 00 00 00 movq $0x0,0x18(%rcx) + 402c2b: 00 + 402c2c: 48 89 51 20 mov %rdx,0x20(%rcx) + 402c30: 48 85 d2 test %rdx,%rdx + 402c33: 75 a3 jne 402bd8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 58) + 402c35: 48 89 08 mov %rcx,(%rax) + 402c38: 48 85 f6 test %rsi,%rsi + 402c3b: 75 a7 jne 402be4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402c3d: 4c 89 c8 mov %r9,%rax + 402c40: 4d 39 d1 cmp %r10,%r9 + 402c43: 0f 84 8d 00 00 00 je 402cd6 + 402c49: 49 83 c1 10 add $0x10,%r9 + 402c4d: e9 76 ff ff ff jmp 402bc8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 28) + 402c52: 66 0f ef c0 pxor %xmm0,%xmm0 + 402c56: bf 40 00 00 00 mov $0x40,%edi + 402c5b: 0f 11 83 10 01 00 00 movups %xmm0,0x110(%rbx) + 402c62: e8 f9 e4 ff ff call 401160 + 402c67: 48 89 83 08 01 00 00 mov %rax,0x108(%rbx) + 402c6e: 49 89 c6 mov %rax,%r14 + 402c71: 48 85 c0 test %rax,%rax + 402c74: 0f 84 aa 00 00 00 je 402d24 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 31) + 402c7a: 48 8d 50 10 lea 0x10(%rax),%rdx + 402c7e: b9 0c 00 00 00 mov $0xc,%ecx + 402c83: 31 c0 xor %eax,%eax + 402c85: be 01 00 00 00 mov $0x1,%esi + 402c8a: 48 89 d7 mov %rdx,%rdi + 402c8d: 4c 8d ab 08 01 00 00 lea 0x108(%rbx),%r13 + 402c94: f3 ab rep stos %eax,%es:(%rdi) + 402c96: 48 8b 05 53 0c 00 00 mov 0xc53(%rip),%rax # 4038f0 <__PRETTY_FUNCTION__.3+0x20> + 402c9d: 4d 89 6e 18 mov %r13,0x18(%r14) + 402ca1: bf 00 02 00 00 mov $0x200,%edi + 402ca6: 49 c7 46 20 08 01 00 movq $0x108,0x20(%r14) + 402cad: 00 + 402cae: 49 89 46 08 mov %rax,0x8(%r14) + 402cb2: e8 49 e4 ff ff call 401100 + 402cb7: 41 c7 46 38 e1 1f 11 movl $0xa0111fe1,0x38(%r14) + 402cbe: a0 + 402cbf: 49 89 06 mov %rax,(%r14) + 402cc2: 48 85 c0 test %rax,%rax + 402cc5: 74 5d je 402d24 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 33) + 402cc7: 48 89 1d 8a 24 00 00 mov %rbx,0x248a(%rip) # 405158 + 402cce: 48 89 d8 mov %rbx,%rax + 402cd1: e9 16 fe ff ff jmp 402aec +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402cd6: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 402cda: e8 51 e3 ff ff call 401030 + 402cdf: 48 8b 83 08 01 00 00 mov 0x108(%rbx),%rax + 402ce6: 8b 50 10 mov 0x10(%rax),%edx + 402ce9: 83 40 0c 01 addl $0x1,0xc(%rax) + 402ced: 4c 89 28 mov %r13,(%rax) + 402cf0: d1 60 08 shll $1,0x8(%rax) + 402cf3: d1 ea shr $1,%edx + 402cf5: 39 50 2c cmp %edx,0x2c(%rax) + 402cf8: 76 1e jbe 402d18 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 65) + 402cfa: 8b 58 30 mov 0x30(%rax),%ebx + 402cfd: 8d 53 01 lea 0x1(%rbx),%edx + 402d00: 89 50 30 mov %edx,0x30(%rax) + 402d03: 83 fa 01 cmp $0x1,%edx + 402d06: 0f 86 3e fe ff ff jbe 402b4a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 69) + 402d0c: c7 40 34 01 00 00 00 movl $0x1,0x34(%rax) + 402d13: e9 32 fe ff ff jmp 402b4a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 + 402d18: c7 40 30 00 00 00 00 movl $0x0,0x30(%rax) + 402d1f: e9 26 fe ff ff jmp 402b4a +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:416 (discriminator 30) + 402d24: 83 cf ff or $0xffffffff,%edi + 402d27: e8 84 e4 ff ff call 4011b0 + 402d2c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402d30 : +gib_check_rust_struct_sizes(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:994 +{ + 402d30: 55 push %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402d31: bf 38 00 00 00 mov $0x38,%edi + 402d36: e8 25 e4 ff ff call 401160 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402d3b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402d3f: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:999 + nursery = (size_t *) ((char *) frame + sizeof(size_t)); + 402d42: 48 8d 50 10 lea 0x10(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1000 + generation = (size_t *) ((char *) nursery + sizeof(size_t)); + 402d46: 48 8d 48 18 lea 0x18(%rax),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:998 + frame = (size_t *) ((char *) stack + sizeof(size_t)); + 402d4a: 48 8d 70 08 lea 0x8(%rax),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1003 + gc_stats = (size_t *) ((char *) footer + sizeof(size_t)); + 402d4e: 48 83 c0 30 add $0x30,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402d52: 4c 8d 4d 28 lea 0x28(%rbp),%r9 + 402d56: 48 89 ef mov %rbp,%rdi + 402d59: 50 push %rax + 402d5a: 4c 8d 45 20 lea 0x20(%rbp),%r8 + 402d5e: e8 2d e4 ff ff call 401190 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 + assert(*stack == sizeof(GibShadowstack)); + 402d63: 48 83 7d 00 18 cmpq $0x18,0x0(%rbp) + 402d68: 58 pop %rax + 402d69: 5a pop %rdx + 402d6a: 75 42 jne 402dae +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 + assert(*frame == sizeof(GibShadowstackFrame)); + 402d6c: 48 83 7d 08 18 cmpq $0x18,0x8(%rbp) + 402d71: 0f 85 cd 00 00 00 jne 402e44 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 + assert(*nursery == sizeof(GibNursery)); + 402d77: 48 83 7d 10 20 cmpq $0x20,0x10(%rbp) + 402d7c: 0f 85 a9 00 00 00 jne 402e2b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 + assert(*generation == sizeof(GibOldgen)); + 402d82: 48 83 7d 18 18 cmpq $0x18,0x18(%rbp) + 402d87: 0f 85 85 00 00 00 jne 402e12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 + assert(*reg_info == sizeof(GibRegionInfo)); + 402d8d: 48 83 7d 20 20 cmpq $0x20,0x20(%rbp) + 402d92: 75 65 jne 402df9 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 + assert(*footer == sizeof(GibOldgenChunkFooter)); + 402d94: 48 83 7d 28 18 cmpq $0x18,0x28(%rbp) + 402d99: 75 45 jne 402de0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 + assert(*gc_stats == sizeof(GibGcStats)); + 402d9b: 48 81 7d 30 f0 00 00 cmpq $0xf0,0x30(%rbp) + 402da2: 00 + 402da3: 75 22 jne 402dc7 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 402da5: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1019 +} + 402da8: 5d pop %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 402da9: e9 82 e2 ff ff jmp 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 (discriminator 1) + assert(*stack == sizeof(GibShadowstack)); + 402dae: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402db3: ba ef 03 00 00 mov $0x3ef,%edx + 402db8: be a8 33 40 00 mov $0x4033a8,%esi + 402dbd: bf e8 33 40 00 mov $0x4033e8,%edi + 402dc2: e8 19 e3 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 (discriminator 1) + assert(*gc_stats == sizeof(GibGcStats)); + 402dc7: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402dcc: ba f5 03 00 00 mov $0x3f5,%edx + 402dd1: be a8 33 40 00 mov $0x4033a8,%esi + 402dd6: bf d0 34 40 00 mov $0x4034d0,%edi + 402ddb: e8 00 e3 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 (discriminator 1) + assert(*footer == sizeof(GibOldgenChunkFooter)); + 402de0: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402de5: ba f4 03 00 00 mov $0x3f4,%edx + 402dea: be a8 33 40 00 mov $0x4033a8,%esi + 402def: bf a8 34 40 00 mov $0x4034a8,%edi + 402df4: e8 e7 e2 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 (discriminator 1) + assert(*reg_info == sizeof(GibRegionInfo)); + 402df9: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402dfe: ba f3 03 00 00 mov $0x3f3,%edx + 402e03: be a8 33 40 00 mov $0x4033a8,%esi + 402e08: bf 80 34 40 00 mov $0x403480,%edi + 402e0d: e8 ce e2 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 (discriminator 1) + assert(*generation == sizeof(GibOldgen)); + 402e12: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402e17: ba f2 03 00 00 mov $0x3f2,%edx + 402e1c: be a8 33 40 00 mov $0x4033a8,%esi + 402e21: bf 58 34 40 00 mov $0x403458,%edi + 402e26: e8 b5 e2 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 (discriminator 1) + assert(*nursery == sizeof(GibNursery)); + 402e2b: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402e30: ba f1 03 00 00 mov $0x3f1,%edx + 402e35: be a8 33 40 00 mov $0x4033a8,%esi + 402e3a: bf 38 34 40 00 mov $0x403438,%edi + 402e3f: e8 9c e2 ff ff call 4010e0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 (discriminator 1) + assert(*frame == sizeof(GibShadowstackFrame)); + 402e44: b9 d0 38 40 00 mov $0x4038d0,%ecx + 402e49: ba f0 03 00 00 mov $0x3f0,%edx + 402e4e: be a8 33 40 00 mov $0x4033a8,%esi + 402e53: bf 10 34 40 00 mov $0x403410,%edi + 402e58: e8 83 e2 ff ff call 4010e0 <__assert_fail@plt> + 402e5d: 0f 1f 00 nopl (%rax) + +0000000000402e60 : +gib_print_symbol.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:458 +int gib_print_symbol(GibSym idx) + 402e60: 48 83 ec 18 sub $0x18,%rsp + 402e64: 48 89 7c 24 08 mov %rdi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:460 + if (idx == comma_symbol) { + 402e69: 48 83 ff ff cmp $0xffffffffffffffff,%rdi + 402e6d: 0f 84 65 01 00 00 je 402fd8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:472 + HASH_FIND(hh, global_sym_table, &idx, sizeof(GibSym), s); + 402e73: 48 8b 35 de 22 00 00 mov 0x22de(%rip),%rsi # 405158 + 402e7a: 49 89 f8 mov %rdi,%r8 + 402e7d: 48 85 f6 test %rsi,%rsi + 402e80: 0f 84 3a 01 00 00 je 402fc0 + 402e86: 0f b6 44 24 0f movzbl 0xf(%rsp),%eax + 402e8b: 0f b6 54 24 0c movzbl 0xc(%rsp),%edx + 402e90: 0f b6 7c 24 0e movzbl 0xe(%rsp),%edi + 402e95: c1 e0 18 shl $0x18,%eax + 402e98: c1 e7 10 shl $0x10,%edi + 402e9b: 8d 94 10 b9 79 37 9e lea -0x61c88647(%rax,%rdx,1),%edx + 402ea2: 8d 04 3a lea (%rdx,%rdi,1),%eax + 402ea5: 0f b6 7c 24 0d movzbl 0xd(%rsp),%edi + 402eaa: 0f b6 54 24 08 movzbl 0x8(%rsp),%edx + 402eaf: c1 e7 08 shl $0x8,%edi + 402eb2: 01 c7 add %eax,%edi + 402eb4: 0f b6 44 24 0b movzbl 0xb(%rsp),%eax + 402eb9: c1 e0 18 shl $0x18,%eax + 402ebc: 8d 8c 02 c2 ba 49 9f lea -0x60b6453e(%rdx,%rax,1),%ecx + 402ec3: 0f b6 44 24 0a movzbl 0xa(%rsp),%eax + 402ec8: c1 e0 10 shl $0x10,%eax + 402ecb: 8d 14 01 lea (%rcx,%rax,1),%edx + 402ece: 0f b6 44 24 09 movzbl 0x9(%rsp),%eax + 402ed3: b9 f7 be ed fe mov $0xfeedbef7,%ecx + 402ed8: c1 e0 08 shl $0x8,%eax + 402edb: 01 d0 add %edx,%eax + 402edd: 29 f8 sub %edi,%eax + 402edf: 81 c7 09 41 12 01 add $0x1124109,%edi + 402ee5: 35 6d f7 07 00 xor $0x7f76d,%eax + 402eea: 89 c2 mov %eax,%edx + 402eec: 29 c7 sub %eax,%edi + 402eee: 29 c1 sub %eax,%ecx + 402ef0: c1 e2 08 shl $0x8,%edx + 402ef3: 31 fa xor %edi,%edx + 402ef5: 29 d1 sub %edx,%ecx + 402ef7: 29 d0 sub %edx,%eax + 402ef9: 89 cf mov %ecx,%edi + 402efb: 89 d1 mov %edx,%ecx + 402efd: c1 e9 0d shr $0xd,%ecx + 402f00: 31 f9 xor %edi,%ecx + 402f02: 89 cf mov %ecx,%edi + 402f04: 29 c8 sub %ecx,%eax + 402f06: 29 ca sub %ecx,%edx + 402f08: c1 ef 0c shr $0xc,%edi + 402f0b: 31 f8 xor %edi,%eax + 402f0d: 89 d7 mov %edx,%edi + 402f0f: 89 c2 mov %eax,%edx + 402f11: 29 c7 sub %eax,%edi + 402f13: 29 c1 sub %eax,%ecx + 402f15: c1 e2 10 shl $0x10,%edx + 402f18: 31 fa xor %edi,%edx + 402f1a: 29 d1 sub %edx,%ecx + 402f1c: 29 d0 sub %edx,%eax + 402f1e: 89 cf mov %ecx,%edi + 402f20: 89 d1 mov %edx,%ecx + 402f22: c1 e9 05 shr $0x5,%ecx + 402f25: 31 f9 xor %edi,%ecx + 402f27: 89 cf mov %ecx,%edi + 402f29: 29 c8 sub %ecx,%eax + 402f2b: c1 ef 03 shr $0x3,%edi + 402f2e: 29 ca sub %ecx,%edx + 402f30: 31 c7 xor %eax,%edi + 402f32: 89 d0 mov %edx,%eax + 402f34: 89 fa mov %edi,%edx + 402f36: 29 f8 sub %edi,%eax + 402f38: c1 e2 0a shl $0xa,%edx + 402f3b: 31 c2 xor %eax,%edx + 402f3d: 89 c8 mov %ecx,%eax + 402f3f: 48 8b 8e 08 01 00 00 mov 0x108(%rsi),%rcx + 402f46: 29 f8 sub %edi,%eax + 402f48: 8b 79 08 mov 0x8(%rcx),%edi + 402f4b: 29 d0 sub %edx,%eax + 402f4d: c1 ea 0f shr $0xf,%edx + 402f50: 31 d0 xor %edx,%eax + 402f52: 8d 57 ff lea -0x1(%rdi),%edx + 402f55: 21 c2 and %eax,%edx + 402f57: 48 c1 e2 04 shl $0x4,%rdx + 402f5b: 48 03 11 add (%rcx),%rdx + 402f5e: 48 8b 32 mov (%rdx),%rsi + 402f61: 48 85 f6 test %rsi,%rsi + 402f64: 74 5a je 402fc0 + 402f66: 48 8b 49 20 mov 0x20(%rcx),%rcx + 402f6a: 48 89 ca mov %rcx,%rdx + 402f6d: 48 29 ce sub %rcx,%rsi + 402f70: 48 f7 da neg %rdx + 402f73: eb 12 jmp 402f87 + 402f75: 0f 1f 00 nopl (%rax) + 402f78: 48 8b b6 28 01 00 00 mov 0x128(%rsi),%rsi + 402f7f: 48 85 f6 test %rsi,%rsi + 402f82: 74 3c je 402fc0 + 402f84: 48 01 d6 add %rdx,%rsi + 402f87: 3b 86 3c 01 00 00 cmp 0x13c(%rsi),%eax + 402f8d: 75 e9 jne 402f78 + 402f8f: 83 be 38 01 00 00 08 cmpl $0x8,0x138(%rsi) + 402f96: 75 e0 jne 402f78 + 402f98: 48 8b 8e 30 01 00 00 mov 0x130(%rsi),%rcx + 402f9f: 48 8b 09 mov (%rcx),%rcx + 402fa2: 48 39 4c 24 08 cmp %rcx,0x8(%rsp) + 402fa7: 75 cf jne 402f78 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:476 + return printf("%s", s->value); + 402fa9: 48 83 c6 08 add $0x8,%rsi + 402fad: bf 40 37 40 00 mov $0x403740,%edi + 402fb2: 31 c0 xor %eax,%eax + 402fb4: e8 07 e1 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 402fb9: 48 83 c4 18 add $0x18,%rsp + 402fbd: c3 ret + 402fbe: 66 90 xchg %ax,%ax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:474 + return printf("%" PRId64, idx); + 402fc0: 4c 89 c6 mov %r8,%rsi + 402fc3: bf 3c 37 40 00 mov $0x40373c,%edi + 402fc8: 31 c0 xor %eax,%eax + 402fca: e8 f1 e0 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 402fcf: 48 83 c4 18 add $0x18,%rsp + 402fd3: c3 ret + 402fd4: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:461 + return printf(","); + 402fd8: bf 2c 00 00 00 mov $0x2c,%edi + 402fdd: e8 5e e0 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:480 +} + 402fe2: 48 83 c4 18 add $0x18,%rsp + 402fe6: c3 ret + +Disassembly of section .fini: + +0000000000402fe8 <_fini>: +_fini(): + 402fe8: f3 0f 1e fa endbr64 + 402fec: 48 83 ec 08 sub $0x8,%rsp + 402ff0: 48 83 c4 08 add $0x8,%rsp + 402ff4: c3 ret diff --git a/microbench/tail_recursion/ManualEffortMap.c b/microbench/tail_recursion/ManualEffortMap.c new file mode 100644 index 000000000..fe6a40038 --- /dev/null +++ b/microbench/tail_recursion/ManualEffortMap.c @@ -0,0 +1,1045 @@ +/* Gibbon program. */ + +#include "gibbon_rts.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN64 +#include +#endif + +#ifdef _GIBBON_POINTER +#include +#endif + +#ifdef _GIBBON_PARALLEL +#include +#include +#endif + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Program starts here + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +typedef struct GibIntProd_struct { + GibInt field0; + } GibIntProd; +typedef struct GibIntGibCursorProd_struct { + GibInt field0; + GibCursor field1; + } GibIntGibCursorProd; +typedef struct GibBoolProd_struct { + GibBool field0; + } GibBoolProd; +typedef struct GibPackedTagGibCursorProd_struct { + GibPackedTag field0; + GibCursor field1; + } GibPackedTagGibCursorProd; +typedef struct GibCursorProd_struct { + GibCursor field0; + } GibCursorProd; +typedef struct GibCursorGibBoolProd_struct { + GibCursor field0; + GibBool field1; + } GibCursorGibBoolProd; +typedef struct GibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + } GibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibIntProd_struct { + GibCursor field0; + GibCursor field1; + GibInt field2; + } GibCursorGibCursorGibIntProd; +typedef struct GibCursorGibCursorGibBoolProd_struct { + GibCursor field0; + GibCursor field1; + GibBool field2; + } GibCursorGibCursorGibBoolProd; +typedef struct GibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + } GibCursorGibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + GibCursor field3; + GibCursor field4; + } GibCursorGibCursorGibCursorGibCursorGibCursorProd; +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_335, + GibCursor loc_334, + GibInt len_25_104_158); +GibCursorGibCursorGibBoolProd checkMapAdd1(GibCursor end_r_338, + GibCursor end_r_339, + GibCursor lst_27_106_162, + GibCursor lst__28_107_163); +GibInt add1(GibInt x_33_110_166); +GibCursorGibCursorGibCursorGibCursorGibCursorProd map_61(GibCursor end_r_342, + GibCursor end_r_343, + GibCursor *loc_341, + GibCursor lst_35_111_167); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_ConsIntList(GibCursor end_r_346, GibCursor end_r_347, GibCursor loc_345, + GibCursor arg_69_114_172); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_without_ptrs_ConsIntList(GibCursor end_r_350, GibCursor end_r_351, + GibCursor loc_349, GibCursor arg_74_119_177); +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_353, + GibCursor arg_79_124_182); +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_355, + GibCursor arg_84_128_186); +GibCursorGibBoolProd caseFn_95(GibCursor end_r_357, + GibCursor lst__28_96_139_197); +GibCursorGibCursorGibBoolProd caseFn_97(GibCursor end_r_360, + GibCursor end_r_361, + GibCursor lst__28_98_142_200, + GibInt x_29_99_143_201, + GibCursor rst_30_100_144_202); +typedef enum { + GibInt_T, + GibFloat_T, + GibSym_T, + GibBool_T, + GibVector_T, + GibList_T, + GibCursor_T, + ConsIntList_T, + } GibDatatype; +void info_table_initialize(void) +{ + int error = gib_info_table_initialize(8); + + if (error < 0) { + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + exit(1); + } + + GibDatatype field_tys[2]; + + field_tys[0] = ConsIntList_T; + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 0, 8, 0, 1, 1, + field_tys, 1); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 0); + exit(1); + } + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 1, 0, 0, 0, 0, + field_tys, 0); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 1); + exit(1); + } + gib_info_table_finalize(); +} +void symbol_table_initialize(void) +{ + gib_add_symbol(967, ")"); + gib_add_symbol(968, "(Nil"); + gib_add_symbol(969, "(Cons"); + gib_add_symbol(970, " ->r "); + gib_add_symbol(971, " ->i "); + gib_add_symbol(972, " "); +} +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_335, + GibCursor loc_334, + GibInt len_25_104_158) +{ + if (loc_334 + 18 > end_r_335) { + gib_grow_region(&loc_334, &end_r_335); + } + + GibBool fltIf_147_159 = len_25_104_158 <= 0; + + if (fltIf_147_159) { + *(GibPackedTag *) loc_334 = 1; + + GibCursor writetag_649 = loc_334 + 1; + GibCursor after_tag_650 = loc_334 + 1; + + return (GibCursorGibCursorGibCursorProd) {end_r_335, loc_334, + after_tag_650}; + } else { + GibInt fltAppE_148_160 = len_25_104_158 - 1; + GibCursor loc_379 = loc_334 + 9; + + *(GibPackedTag *) loc_334 = 0; + + GibCursor writetag_658 = loc_334 + 1; + GibCursor after_tag_659 = loc_334 + 1; + + *(GibInt *) after_tag_659 = len_25_104_158; + + GibCursor writecur_663 = after_tag_659 + sizeof(GibInt); + GibCursorGibCursorGibCursorProd tmp_struct_0 = + mkConsIntList(end_r_335, loc_379, fltAppE_148_160); + GibCursor pvrtmp_1010 = tmp_struct_0.field0; + GibCursor pvrtmp_1011 = tmp_struct_0.field1; + GibCursor pvrtmp_1012 = tmp_struct_0.field2; + + return (GibCursorGibCursorGibCursorProd) {pvrtmp_1010, loc_334, + pvrtmp_1012}; + } +} +GibCursorGibCursorGibBoolProd checkMapAdd1(GibCursor end_r_338, + GibCursor end_r_339, + GibCursor lst_27_106_162, + GibCursor lst__28_107_163) +{ + GibPackedTag tmpval_1021 = *(GibPackedTag *) lst_27_106_162; + GibCursor tmpcur_1022 = lst_27_106_162 + 1; + + + switch_1042: + ; + switch (tmpval_1021) { + + case 1: + { + GibCursorGibBoolProd tmp_struct_4 = + caseFn_95(end_r_339, lst__28_107_163); + GibCursor pvrtmp_1023 = tmp_struct_4.field0; + GibBool pvrtmp_1024 = tmp_struct_4.field1; + + return (GibCursorGibCursorGibBoolProd) {end_r_338, pvrtmp_1023, + pvrtmp_1024}; + break; + } + + case 0: + { + GibInt tmpval_1025 = *(GibInt *) tmpcur_1022; + GibCursor tmpcur_1026 = tmpcur_1022 + sizeof(GibInt); + GibCursorGibCursorGibBoolProd tmp_struct_5 = + caseFn_97(end_r_339, end_r_338, lst__28_107_163, tmpval_1025, tmpcur_1026); + GibCursor pvrtmp_1027 = tmp_struct_5.field0; + GibCursor pvrtmp_1028 = tmp_struct_5.field1; + GibBool pvrtmp_1029 = tmp_struct_5.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1028, pvrtmp_1027, + pvrtmp_1029}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_7 = *(uintptr_t *) tmpcur_1022; + GibCursor tmpcur_1030 = GIB_UNTAG(tagged_tmpcur_7); + GibCursor tmpaftercur_1031 = tmpcur_1022 + 8; + uint16_t tmptag_1032 = GIB_GET_TAG(tagged_tmpcur_7); + GibCursor end_from_tagged_indr_510 = tmpcur_1030 + tmptag_1032; + GibCursor jump_512 = tmpcur_1022 + 8; + GibCursorGibCursorGibBoolProd tmp_struct_6 = + checkMapAdd1(end_from_tagged_indr_510, end_r_339, tmpcur_1030, lst__28_107_163); + GibCursor pvrtmp_1033 = tmp_struct_6.field0; + GibCursor pvrtmp_1034 = tmp_struct_6.field1; + GibBool pvrtmp_1035 = tmp_struct_6.field2; + + return (GibCursorGibCursorGibBoolProd) {end_r_338, pvrtmp_1034, + pvrtmp_1035}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_9 = *(uintptr_t *) tmpcur_1022; + GibCursor tmpcur_1036 = GIB_UNTAG(tagged_tmpcur_9); + GibCursor tmpaftercur_1037 = tmpcur_1022 + 8; + uint16_t tmptag_1038 = GIB_GET_TAG(tagged_tmpcur_9); + GibCursor end_from_tagged_indr_510 = tmpcur_1036 + tmptag_1038; + GibCursorGibCursorGibBoolProd tmp_struct_8 = + checkMapAdd1(end_from_tagged_indr_510, end_r_339, tmpcur_1036, lst__28_107_163); + GibCursor pvrtmp_1039 = tmp_struct_8.field0; + GibCursor pvrtmp_1040 = tmp_struct_8.field1; + GibBool pvrtmp_1041 = tmp_struct_8.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1039, pvrtmp_1040, + pvrtmp_1041}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1021"); + exit(1); + } + } +} +GibInt add1(GibInt x_33_110_166) +{ + GibInt tailprim_471 = x_33_110_166 + 1; + + return tailprim_471; +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd map_61(GibCursor end_r_342, + GibCursor end_r_343, + GibCursor *loc_341, + GibCursor lst_35_111_167) +{ + if (*loc_341 + 18 > end_r_343) { + gib_grow_region(&(*loc_341), &end_r_343); + } + + GibPackedTag tmpval_1043 = *(GibPackedTag *) lst_35_111_167; + GibCursor tmpcur_1044 = lst_35_111_167 + 1; + + + switch_1092: + ; + switch (tmpval_1043) { + + case 1: + { + GibCursor jump_472 = lst_35_111_167 + 1; + + *(GibPackedTag *) (*loc_341) = 1; + + GibCursor writetag_686 = *loc_341 + 1; + GibCursor after_tag_687 = *loc_341 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_342, + end_r_343, + jump_472, + *loc_341, + after_tag_687}; + break; + } + + case 0: + { + GibInt tmpval_1049 = *(GibInt *) tmpcur_1044; + GibCursor tmpcur_1050 = tmpcur_1044 + sizeof(GibInt); + GibInt fltPkd_149_170 = add1(tmpval_1049); + GibCursor *loc_402 = &(*loc_341 + 9); + + *(GibPackedTag *) (*loc_341) = 0; + + GibCursor writetag_698 = *loc_341 + 1; + GibCursor after_tag_699 = *loc_341 + 1; + + *(GibInt *) after_tag_699 = fltPkd_149_170; + + GibCursor writecur_703 = after_tag_699 + sizeof(GibInt); + return map_61(end_r_342, end_r_343, loc_402, tmpcur_1050); + // GibCursor pvrtmp_1051 = tmp_struct_10.field0; + // GibCursor pvrtmp_1052 = tmp_struct_10.field1; + // GibCursor pvrtmp_1053 = tmp_struct_10.field2; + // GibCursor pvrtmp_1054 = tmp_struct_10.field3; + // GibCursor pvrtmp_1055 = tmp_struct_10.field4; + + // return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1051, + // pvrtmp_1052, + // pvrtmp_1053, + // loc_341, + // pvrtmp_1055}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_12 = *(uintptr_t *) tmpcur_1044; + GibCursor tmpcur_1064 = GIB_UNTAG(tagged_tmpcur_12); + GibCursor tmpaftercur_1065 = tmpcur_1044 + 8; + uint16_t tmptag_1066 = GIB_GET_TAG(tagged_tmpcur_12); + GibCursor end_from_tagged_indr_515 = tmpcur_1064 + tmptag_1066; + GibCursor jump_517 = tmpcur_1044 + 8; + return map_61(end_from_tagged_indr_515, end_r_343, loc_341, tmpcur_1064); + // GibCursor pvrtmp_1067 = tmp_struct_11.field0; + // GibCursor pvrtmp_1068 = tmp_struct_11.field1; + // GibCursor pvrtmp_1069 = tmp_struct_11.field2; + // GibCursor pvrtmp_1070 = tmp_struct_11.field3; + // GibCursor pvrtmp_1071 = tmp_struct_11.field4; + + // return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_342, + // pvrtmp_1068, + // jump_517, + // pvrtmp_1070, + // pvrtmp_1071}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_14 = *(uintptr_t *) tmpcur_1044; + GibCursor tmpcur_1078 = GIB_UNTAG(tagged_tmpcur_14); + GibCursor tmpaftercur_1079 = tmpcur_1044 + 8; + uint16_t tmptag_1080 = GIB_GET_TAG(tagged_tmpcur_14); + GibCursor end_from_tagged_indr_515 = tmpcur_1078 + tmptag_1080; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_13 = + map_61(end_from_tagged_indr_515, end_r_343, loc_341, tmpcur_1078); + // GibCursor pvrtmp_1081 = tmp_struct_13.field0; + // GibCursor pvrtmp_1082 = tmp_struct_13.field1; + // GibCursor pvrtmp_1083 = tmp_struct_13.field2; + // GibCursor pvrtmp_1084 = tmp_struct_13.field3; + // GibCursor pvrtmp_1085 = tmp_struct_13.field4; + + // return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1081, + // pvrtmp_1082, + // pvrtmp_1083, + // pvrtmp_1084, + // pvrtmp_1085}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1043"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_ConsIntList(GibCursor end_r_346, + GibCursor end_r_347, + GibCursor loc_345, + GibCursor arg_69_114_172) +{ + if (loc_345 + 18 > end_r_347) { + gib_grow_region(&loc_345, &end_r_347); + } + + GibPackedTag tmpval_1093 = *(GibPackedTag *) arg_69_114_172; + GibCursor tmpcur_1094 = arg_69_114_172 + 1; + + + switch_1142: + ; + switch (tmpval_1093) { + + case 0: + { + GibInt tmpval_1095 = *(GibInt *) tmpcur_1094; + GibCursor tmpcur_1096 = tmpcur_1094 + sizeof(GibInt); + GibCursor loc_414 = loc_345 + 9; + + *(GibPackedTag *) loc_345 = 0; + + GibCursor writetag_722 = loc_345 + 1; + GibCursor after_tag_723 = loc_345 + 1; + + *(GibInt *) after_tag_723 = tmpval_1095; + + GibCursor writecur_727 = after_tag_723 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_18 = + _copy_ConsIntList(end_r_346, end_r_347, loc_414, tmpcur_1096); + GibCursor pvrtmp_1097 = tmp_struct_18.field0; + GibCursor pvrtmp_1098 = tmp_struct_18.field1; + GibCursor pvrtmp_1099 = tmp_struct_18.field2; + GibCursor pvrtmp_1100 = tmp_struct_18.field3; + GibCursor pvrtmp_1101 = tmp_struct_18.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1097, + pvrtmp_1098, + pvrtmp_1099, + loc_345, + pvrtmp_1101}; + break; + } + + case 1: + { + GibCursor jump_480 = arg_69_114_172 + 1; + + *(GibPackedTag *) loc_345 = 1; + + GibCursor writetag_732 = loc_345 + 1; + GibCursor after_tag_733 = loc_345 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_346, + end_r_347, + jump_480, + loc_345, + after_tag_733}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_20 = *(uintptr_t *) tmpcur_1094; + GibCursor tmpcur_1114 = GIB_UNTAG(tagged_tmpcur_20); + GibCursor tmpaftercur_1115 = tmpcur_1094 + 8; + uint16_t tmptag_1116 = GIB_GET_TAG(tagged_tmpcur_20); + GibCursor end_from_tagged_indr_521 = tmpcur_1114 + tmptag_1116; + GibCursor jump_523 = tmpcur_1094 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_19 = + _copy_ConsIntList(end_from_tagged_indr_521, end_r_347, loc_345, tmpcur_1114); + GibCursor pvrtmp_1117 = tmp_struct_19.field0; + GibCursor pvrtmp_1118 = tmp_struct_19.field1; + GibCursor pvrtmp_1119 = tmp_struct_19.field2; + GibCursor pvrtmp_1120 = tmp_struct_19.field3; + GibCursor pvrtmp_1121 = tmp_struct_19.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_346, + pvrtmp_1118, + jump_523, + pvrtmp_1120, + pvrtmp_1121}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_22 = *(uintptr_t *) tmpcur_1094; + GibCursor tmpcur_1128 = GIB_UNTAG(tagged_tmpcur_22); + GibCursor tmpaftercur_1129 = tmpcur_1094 + 8; + uint16_t tmptag_1130 = GIB_GET_TAG(tagged_tmpcur_22); + GibCursor end_from_tagged_indr_521 = tmpcur_1128 + tmptag_1130; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_21 = + _copy_ConsIntList(end_from_tagged_indr_521, end_r_347, loc_345, tmpcur_1128); + GibCursor pvrtmp_1131 = tmp_struct_21.field0; + GibCursor pvrtmp_1132 = tmp_struct_21.field1; + GibCursor pvrtmp_1133 = tmp_struct_21.field2; + GibCursor pvrtmp_1134 = tmp_struct_21.field3; + GibCursor pvrtmp_1135 = tmp_struct_21.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1131, + pvrtmp_1132, + pvrtmp_1133, + pvrtmp_1134, + pvrtmp_1135}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1093"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_without_ptrs_ConsIntList(GibCursor end_r_350, + GibCursor end_r_351, + GibCursor loc_349, + GibCursor arg_74_119_177) +{ + GibPackedTag tmpval_1143 = *(GibPackedTag *) arg_74_119_177; + GibCursor tmpcur_1144 = arg_74_119_177 + 1; + + + switch_1192: + ; + switch (tmpval_1143) { + + case 0: + { + GibInt tmpval_1145 = *(GibInt *) tmpcur_1144; + GibCursor tmpcur_1146 = tmpcur_1144 + sizeof(GibInt); + GibCursor loc_427 = loc_349 + 9; + + *(GibPackedTag *) loc_349 = 0; + + GibCursor writetag_754 = loc_349 + 1; + GibCursor after_tag_755 = loc_349 + 1; + + *(GibInt *) after_tag_755 = tmpval_1145; + + GibCursor writecur_759 = after_tag_755 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_26 = + _copy_without_ptrs_ConsIntList(end_r_350, end_r_351, loc_427, tmpcur_1146); + GibCursor pvrtmp_1147 = tmp_struct_26.field0; + GibCursor pvrtmp_1148 = tmp_struct_26.field1; + GibCursor pvrtmp_1149 = tmp_struct_26.field2; + GibCursor pvrtmp_1150 = tmp_struct_26.field3; + GibCursor pvrtmp_1151 = tmp_struct_26.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1147, + pvrtmp_1148, + pvrtmp_1149, + loc_349, + pvrtmp_1151}; + break; + } + + case 1: + { + GibCursor jump_485 = arg_74_119_177 + 1; + + *(GibPackedTag *) loc_349 = 1; + + GibCursor writetag_764 = loc_349 + 1; + GibCursor after_tag_765 = loc_349 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_350, + end_r_351, + jump_485, + loc_349, + after_tag_765}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_28 = *(uintptr_t *) tmpcur_1144; + GibCursor tmpcur_1164 = GIB_UNTAG(tagged_tmpcur_28); + GibCursor tmpaftercur_1165 = tmpcur_1144 + 8; + uint16_t tmptag_1166 = GIB_GET_TAG(tagged_tmpcur_28); + GibCursor end_from_tagged_indr_527 = tmpcur_1164 + tmptag_1166; + GibCursor jump_529 = tmpcur_1144 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_27 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_527, end_r_351, loc_349, tmpcur_1164); + GibCursor pvrtmp_1167 = tmp_struct_27.field0; + GibCursor pvrtmp_1168 = tmp_struct_27.field1; + GibCursor pvrtmp_1169 = tmp_struct_27.field2; + GibCursor pvrtmp_1170 = tmp_struct_27.field3; + GibCursor pvrtmp_1171 = tmp_struct_27.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_350, + pvrtmp_1168, + jump_529, + pvrtmp_1170, + pvrtmp_1171}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_30 = *(uintptr_t *) tmpcur_1144; + GibCursor tmpcur_1178 = GIB_UNTAG(tagged_tmpcur_30); + GibCursor tmpaftercur_1179 = tmpcur_1144 + 8; + uint16_t tmptag_1180 = GIB_GET_TAG(tagged_tmpcur_30); + GibCursor end_from_tagged_indr_527 = tmpcur_1178 + tmptag_1180; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_29 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_527, end_r_351, loc_349, tmpcur_1178); + GibCursor pvrtmp_1181 = tmp_struct_29.field0; + GibCursor pvrtmp_1182 = tmp_struct_29.field1; + GibCursor pvrtmp_1183 = tmp_struct_29.field2; + GibCursor pvrtmp_1184 = tmp_struct_29.field3; + GibCursor pvrtmp_1185 = tmp_struct_29.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1181, + pvrtmp_1182, + pvrtmp_1183, + pvrtmp_1184, + pvrtmp_1185}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1143"); + exit(1); + } + } +} +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_353, + GibCursor arg_79_124_182) +{ + GibPackedTag tmpval_1193 = *(GibPackedTag *) arg_79_124_182; + GibCursor tmpcur_1194 = arg_79_124_182 + 1; + + + switch_1209: + ; + switch (tmpval_1193) { + + case 0: + { + GibInt tmpval_1195 = *(GibInt *) tmpcur_1194; + GibCursor tmpcur_1196 = tmpcur_1194 + sizeof(GibInt); + GibCursorGibCursorProd tmp_struct_31 = + _traverse_ConsIntList(end_r_353, tmpcur_1196); + GibCursor pvrtmp_1197 = tmp_struct_31.field0; + GibCursor pvrtmp_1198 = tmp_struct_31.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1197, pvrtmp_1198}; + break; + } + + case 1: + { + GibCursor jump_490 = arg_79_124_182 + 1; + + return (GibCursorGibCursorProd) {end_r_353, jump_490}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_33 = *(uintptr_t *) tmpcur_1194; + GibCursor tmpcur_1199 = GIB_UNTAG(tagged_tmpcur_33); + GibCursor tmpaftercur_1200 = tmpcur_1194 + 8; + uint16_t tmptag_1201 = GIB_GET_TAG(tagged_tmpcur_33); + GibCursor end_from_tagged_indr_533 = tmpcur_1199 + tmptag_1201; + GibCursor jump_535 = tmpcur_1194 + 8; + GibCursorGibCursorProd tmp_struct_32 = + _traverse_ConsIntList(end_from_tagged_indr_533, tmpcur_1199); + GibCursor pvrtmp_1202 = tmp_struct_32.field0; + GibCursor pvrtmp_1203 = tmp_struct_32.field1; + + return (GibCursorGibCursorProd) {end_r_353, jump_535}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_35 = *(uintptr_t *) tmpcur_1194; + GibCursor tmpcur_1204 = GIB_UNTAG(tagged_tmpcur_35); + GibCursor tmpaftercur_1205 = tmpcur_1194 + 8; + uint16_t tmptag_1206 = GIB_GET_TAG(tagged_tmpcur_35); + GibCursor end_from_tagged_indr_533 = tmpcur_1204 + tmptag_1206; + GibCursorGibCursorProd tmp_struct_34 = + _traverse_ConsIntList(end_from_tagged_indr_533, tmpcur_1204); + GibCursor pvrtmp_1207 = tmp_struct_34.field0; + GibCursor pvrtmp_1208 = tmp_struct_34.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1207, pvrtmp_1208}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1193"); + exit(1); + } + } +} +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_355, + GibCursor arg_84_128_186) +{ + GibPackedTag tmpval_1210 = *(GibPackedTag *) arg_84_128_186; + GibCursor tmpcur_1211 = arg_84_128_186 + 1; + + + switch_1226: + ; + switch (tmpval_1210) { + + case 0: + { + GibInt tmpval_1212 = *(GibInt *) tmpcur_1211; + GibCursor tmpcur_1213 = tmpcur_1211 + sizeof(GibInt); + unsigned char wildcard_89_131_189 = gib_print_symbol(969); + unsigned char wildcard_92_132_190 = gib_print_symbol(972); + unsigned char y_87_133_191 = printf("%ld", tmpval_1212); + unsigned char wildcard_91_134_192 = gib_print_symbol(972); + GibCursorGibCursorProd tmp_struct_36 = + _print_ConsIntList(end_r_355, tmpcur_1213); + GibCursor pvrtmp_1214 = tmp_struct_36.field0; + GibCursor pvrtmp_1215 = tmp_struct_36.field1; + unsigned char wildcard_90_136_194 = gib_print_symbol(967); + + return (GibCursorGibCursorProd) {pvrtmp_1214, pvrtmp_1215}; + break; + } + + case 1: + { + GibCursor jump_495 = arg_84_128_186 + 1; + unsigned char wildcard_93_137_195 = gib_print_symbol(968); + unsigned char wildcard_94_138_196 = gib_print_symbol(967); + + return (GibCursorGibCursorProd) {end_r_355, jump_495}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_38 = *(uintptr_t *) tmpcur_1211; + GibCursor tmpcur_1216 = GIB_UNTAG(tagged_tmpcur_38); + GibCursor tmpaftercur_1217 = tmpcur_1211 + 8; + uint16_t tmptag_1218 = GIB_GET_TAG(tagged_tmpcur_38); + GibCursor end_from_tagged_indr_539 = tmpcur_1216 + tmptag_1218; + GibCursor jump_541 = tmpcur_1211 + 8; + unsigned char wildcard_544 = gib_print_symbol(971); + GibCursorGibCursorProd tmp_struct_37 = + _print_ConsIntList(end_from_tagged_indr_539, tmpcur_1216); + GibCursor pvrtmp_1219 = tmp_struct_37.field0; + GibCursor pvrtmp_1220 = tmp_struct_37.field1; + + return (GibCursorGibCursorProd) {end_r_355, jump_541}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_40 = *(uintptr_t *) tmpcur_1211; + GibCursor tmpcur_1221 = GIB_UNTAG(tagged_tmpcur_40); + GibCursor tmpaftercur_1222 = tmpcur_1211 + 8; + uint16_t tmptag_1223 = GIB_GET_TAG(tagged_tmpcur_40); + GibCursor end_from_tagged_indr_539 = tmpcur_1221 + tmptag_1223; + unsigned char wildcard_544 = gib_print_symbol(970); + GibCursorGibCursorProd tmp_struct_39 = + _print_ConsIntList(end_from_tagged_indr_539, tmpcur_1221); + GibCursor pvrtmp_1224 = tmp_struct_39.field0; + GibCursor pvrtmp_1225 = tmp_struct_39.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1224, pvrtmp_1225}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1210"); + exit(1); + } + } +} +GibCursorGibBoolProd caseFn_95(GibCursor end_r_357, + GibCursor lst__28_96_139_197) +{ + GibPackedTag tmpval_1227 = *(GibPackedTag *) lst__28_96_139_197; + GibCursor tmpcur_1228 = lst__28_96_139_197 + 1; + + + switch_1241: + ; + switch (tmpval_1227) { + + case 1: + { + return (GibCursorGibBoolProd) {end_r_357, true}; + break; + } + + case 0: + { + GibInt tmpval_1229 = *(GibInt *) tmpcur_1228; + GibCursor tmpcur_1230 = tmpcur_1228 + sizeof(GibInt); + + return (GibCursorGibBoolProd) {end_r_357, false}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_42 = *(uintptr_t *) tmpcur_1228; + GibCursor tmpcur_1231 = GIB_UNTAG(tagged_tmpcur_42); + GibCursor tmpaftercur_1232 = tmpcur_1228 + 8; + uint16_t tmptag_1233 = GIB_GET_TAG(tagged_tmpcur_42); + GibCursor end_from_tagged_indr_545 = tmpcur_1231 + tmptag_1233; + GibCursor jump_547 = tmpcur_1228 + 8; + GibCursorGibBoolProd tmp_struct_41 = + caseFn_95(end_from_tagged_indr_545, tmpcur_1231); + GibCursor pvrtmp_1234 = tmp_struct_41.field0; + GibBool pvrtmp_1235 = tmp_struct_41.field1; + + return (GibCursorGibBoolProd) {end_r_357, pvrtmp_1235}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_44 = *(uintptr_t *) tmpcur_1228; + GibCursor tmpcur_1236 = GIB_UNTAG(tagged_tmpcur_44); + GibCursor tmpaftercur_1237 = tmpcur_1228 + 8; + uint16_t tmptag_1238 = GIB_GET_TAG(tagged_tmpcur_44); + GibCursor end_from_tagged_indr_545 = tmpcur_1236 + tmptag_1238; + GibCursorGibBoolProd tmp_struct_43 = + caseFn_95(end_from_tagged_indr_545, tmpcur_1236); + GibCursor pvrtmp_1239 = tmp_struct_43.field0; + GibBool pvrtmp_1240 = tmp_struct_43.field1; + + return (GibCursorGibBoolProd) {pvrtmp_1239, pvrtmp_1240}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1227"); + exit(1); + } + } +} +GibCursorGibCursorGibBoolProd caseFn_97(GibCursor end_r_360, + GibCursor end_r_361, + GibCursor lst__28_98_142_200, + GibInt x_29_99_143_201, + GibCursor rst_30_100_144_202) +{ + GibPackedTag tmpval_1242 = *(GibPackedTag *) lst__28_98_142_200; + GibCursor tmpcur_1243 = lst__28_98_142_200 + 1; + + + switch_1261: + ; + switch (tmpval_1242) { + + case 1: + { + return (GibCursorGibCursorGibBoolProd) {end_r_360, end_r_361, + false}; + break; + } + + case 0: + { + GibInt tmpval_1244 = *(GibInt *) tmpcur_1243; + GibCursor tmpcur_1245 = tmpcur_1243 + sizeof(GibInt); + GibInt fltPrm_152_205 = x_29_99_143_201 + 1; + GibBool fltIf_151_206 = tmpval_1244 == fltPrm_152_205; + + if (fltIf_151_206) { + GibCursorGibCursorGibBoolProd tmp_struct_45 = + checkMapAdd1(end_r_361, end_r_360, rst_30_100_144_202, tmpcur_1245); + GibCursor pvrtmp_1246 = tmp_struct_45.field0; + GibCursor pvrtmp_1247 = tmp_struct_45.field1; + GibBool pvrtmp_1248 = tmp_struct_45.field2; + GibBool tailprim_505 = true && pvrtmp_1248; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1247, + pvrtmp_1246, + tailprim_505}; + } else { + return (GibCursorGibCursorGibBoolProd) {end_r_360, end_r_361, + false}; + } + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_47 = *(uintptr_t *) tmpcur_1243; + GibCursor tmpcur_1249 = GIB_UNTAG(tagged_tmpcur_47); + GibCursor tmpaftercur_1250 = tmpcur_1243 + 8; + uint16_t tmptag_1251 = GIB_GET_TAG(tagged_tmpcur_47); + GibCursor end_from_tagged_indr_550 = tmpcur_1249 + tmptag_1251; + GibCursor jump_552 = tmpcur_1243 + 8; + GibCursorGibCursorGibBoolProd tmp_struct_46 = + caseFn_97(end_from_tagged_indr_550, end_r_361, tmpcur_1249, x_29_99_143_201, rst_30_100_144_202); + GibCursor pvrtmp_1252 = tmp_struct_46.field0; + GibCursor pvrtmp_1253 = tmp_struct_46.field1; + GibBool pvrtmp_1254 = tmp_struct_46.field2; + + return (GibCursorGibCursorGibBoolProd) {end_r_360, pvrtmp_1253, + pvrtmp_1254}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_49 = *(uintptr_t *) tmpcur_1243; + GibCursor tmpcur_1255 = GIB_UNTAG(tagged_tmpcur_49); + GibCursor tmpaftercur_1256 = tmpcur_1243 + 8; + uint16_t tmptag_1257 = GIB_GET_TAG(tagged_tmpcur_49); + GibCursor end_from_tagged_indr_550 = tmpcur_1255 + tmptag_1257; + GibCursorGibCursorGibBoolProd tmp_struct_48 = + caseFn_97(end_from_tagged_indr_550, end_r_361, tmpcur_1255, x_29_99_143_201, rst_30_100_144_202); + GibCursor pvrtmp_1258 = tmp_struct_48.field0; + GibCursor pvrtmp_1259 = tmp_struct_48.field1; + GibBool pvrtmp_1260 = tmp_struct_48.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1258, pvrtmp_1259, + pvrtmp_1260}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1242"); + exit(1); + } + } +} +int main(int argc, char **argv) +{ + int init_58 = gib_init(argc, argv); + + info_table_initialize(); + symbol_table_initialize(); + + GibChunk region_973 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_375 = region_973.start; + GibCursor end_r_375 = region_973.end; + GibCursorGibCursorGibCursorProd tmp_struct_50 = + mkConsIntList(end_r_375, r_375, 10000000); + GibCursor pvrtmp_974 = tmp_struct_50.field0; + GibCursor pvrtmp_975 = tmp_struct_50.field1; + GibCursor pvrtmp_976 = tmp_struct_50.field2; + GibChunk region_981 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_374 = region_981.start; + GibCursor end_r_374 = region_981.end; + GibCursor pvrtmp_993; + GibCursor pvrtmp_994; + GibCursor pvrtmp_995; + GibVector *times_55 = gib_vector_alloc(gib_get_iters_param(), + sizeof(double)); + struct timespec begin_pvrtmp_993; + struct timespec end_pvrtmp_993; + + for (long long iters_pvrtmp_993 = 0; iters_pvrtmp_993 < + gib_get_iters_param(); iters_pvrtmp_993++) { + if (iters_pvrtmp_993 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_pvrtmp_993); + + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_51 = + map_61(pvrtmp_974, end_r_374, &r_374, pvrtmp_975); + GibCursor pvrtmp_982 = tmp_struct_51.field0; + GibCursor pvrtmp_983 = tmp_struct_51.field1; + GibCursor pvrtmp_984 = tmp_struct_51.field2; + GibCursor pvrtmp_985 = r_374; + GibCursor pvrtmp_986 = tmp_struct_51.field4; + + pvrtmp_993 = pvrtmp_983; + pvrtmp_994 = pvrtmp_985; + pvrtmp_995 = pvrtmp_986; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_pvrtmp_993); + if (iters_pvrtmp_993 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_restore_state(); + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_52 = gib_difftimespecs(&begin_pvrtmp_993, + &end_pvrtmp_993); + + printf("itertime: %lf\n", itertime_52); + gib_vector_inplace_update(times_55, iters_pvrtmp_993, &itertime_52); + } + gib_vector_inplace_sort(times_55, gib_compare_doubles); + + double *tmp_56 = (double *) gib_vector_nth(times_55, gib_get_iters_param() / + 2); + double selftimed_54 = *tmp_56; + double batchtime_53 = gib_sum_timing_array(times_55); + + gib_print_timing_array(times_55); + gib_vector_free(times_55); + printf("ITERS: %ld\n", gib_get_iters_param()); + printf("SIZE: %ld\n", gib_get_size_param()); + printf("BATCHTIME: %e\n", batchtime_53); + printf("SELFTIMED: %e\n", selftimed_54); + + GibCursorGibCursorGibBoolProd tmp_struct_57 = + checkMapAdd1(pvrtmp_974, end_r_374, pvrtmp_975, pvrtmp_994); + GibCursor pvrtmp_1003 = tmp_struct_57.field0; + GibCursor pvrtmp_1004 = tmp_struct_57.field1; + GibBool pvrtmp_1005 = tmp_struct_57.field2; + + if (pvrtmp_1005) { + printf("#t"); + printf("\n"); + } else { + printf("#f"); + printf("\n"); + } + + int exit_59 = gib_exit(); + + return exit_59; +} \ No newline at end of file diff --git a/microbench/tail_recursion/ManualEffortMap.exe b/microbench/tail_recursion/ManualEffortMap.exe new file mode 100755 index 000000000..42d14ba20 Binary files /dev/null and b/microbench/tail_recursion/ManualEffortMap.exe differ diff --git a/microbench/tail_recursion/ManualEffortMapNoTail.exe b/microbench/tail_recursion/ManualEffortMapNoTail.exe new file mode 100755 index 000000000..22a6a7566 Binary files /dev/null and b/microbench/tail_recursion/ManualEffortMapNoTail.exe differ diff --git a/microbench/tail_recursion/Map.c b/microbench/tail_recursion/Map.c new file mode 100644 index 000000000..c10b5e154 --- /dev/null +++ b/microbench/tail_recursion/Map.c @@ -0,0 +1,1047 @@ +/* Gibbon program. */ + +#include "gibbon_rts.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN64 +#include +#endif + +#ifdef _GIBBON_POINTER +#include +#endif + +#ifdef _GIBBON_PARALLEL +#include +#include +#endif + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Program starts here + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +typedef struct GibIntProd_struct { + GibInt field0; + } GibIntProd; +typedef struct GibIntGibCursorProd_struct { + GibInt field0; + GibCursor field1; + } GibIntGibCursorProd; +typedef struct GibBoolProd_struct { + GibBool field0; + } GibBoolProd; +typedef struct GibPackedTagGibCursorProd_struct { + GibPackedTag field0; + GibCursor field1; + } GibPackedTagGibCursorProd; +typedef struct GibCursorProd_struct { + GibCursor field0; + } GibCursorProd; +typedef struct GibCursorGibBoolProd_struct { + GibCursor field0; + GibBool field1; + } GibCursorGibBoolProd; +typedef struct GibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + } GibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibIntProd_struct { + GibCursor field0; + GibCursor field1; + GibInt field2; + } GibCursorGibCursorGibIntProd; +typedef struct GibCursorGibCursorGibBoolProd_struct { + GibCursor field0; + GibCursor field1; + GibBool field2; + } GibCursorGibCursorGibBoolProd; +typedef struct GibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + } GibCursorGibCursorGibCursorProd; +typedef struct GibCursorGibCursorGibCursorGibCursorGibCursorProd_struct { + GibCursor field0; + GibCursor field1; + GibCursor field2; + GibCursor field3; + GibCursor field4; + } GibCursorGibCursorGibCursorGibCursorGibCursorProd; +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_335, + GibCursor loc_334, + GibInt len_25_104_158); +GibCursorGibCursorGibBoolProd checkMapAdd1(GibCursor end_r_338, + GibCursor end_r_339, + GibCursor lst_27_106_162, + GibCursor lst__28_107_163); +GibInt add1(GibInt x_33_110_166); +GibCursorGibCursorGibCursorGibCursorGibCursorProd map_61(GibCursor end_r_342, + GibCursor end_r_343, + GibCursor loc_341, + GibCursor lst_35_111_167); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_ConsIntList(GibCursor end_r_346, GibCursor end_r_347, GibCursor loc_345, + GibCursor arg_69_114_172); +GibCursorGibCursorGibCursorGibCursorGibCursorProd +_copy_without_ptrs_ConsIntList(GibCursor end_r_350, GibCursor end_r_351, + GibCursor loc_349, GibCursor arg_74_119_177); +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_353, + GibCursor arg_79_124_182); +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_355, + GibCursor arg_84_128_186); +GibCursorGibBoolProd caseFn_95(GibCursor end_r_357, + GibCursor lst__28_96_139_197); +GibCursorGibCursorGibBoolProd caseFn_97(GibCursor end_r_360, + GibCursor end_r_361, + GibCursor lst__28_98_142_200, + GibInt x_29_99_143_201, + GibCursor rst_30_100_144_202); +typedef enum { + GibInt_T, + GibFloat_T, + GibSym_T, + GibBool_T, + GibVector_T, + GibList_T, + GibCursor_T, + ConsIntList_T, + } GibDatatype; +void info_table_initialize(void) +{ + int error = gib_info_table_initialize(8); + + if (error < 0) { + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + exit(1); + } + + GibDatatype field_tys[2]; + + field_tys[0] = ConsIntList_T; + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 0, 8, 0, 1, 1, + field_tys, 1); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 0); + exit(1); + } + error = gib_info_table_insert_packed_dcon(ConsIntList_T, 1, 0, 0, 0, 0, + field_tys, 0); + if (error < 0) { + fprintf(stderr, + "Couldn't insert into info table, errorno=%d, tycon=%d, dcon=%d", + error, ConsIntList_T, 1); + exit(1); + } + gib_info_table_finalize(); +} +void symbol_table_initialize(void) +{ + gib_add_symbol(967, ")"); + gib_add_symbol(968, "(Nil"); + gib_add_symbol(969, "(Cons"); + gib_add_symbol(970, " ->r "); + gib_add_symbol(971, " ->i "); + gib_add_symbol(972, " "); +} +GibCursorGibCursorGibCursorProd mkConsIntList(GibCursor end_r_335, + GibCursor loc_334, + GibInt len_25_104_158) +{ + if (loc_334 + 18 > end_r_335) { + gib_grow_region(&loc_334, &end_r_335); + } + + GibBool fltIf_147_159 = len_25_104_158 <= 0; + + if (fltIf_147_159) { + *(GibPackedTag *) loc_334 = 1; + + GibCursor writetag_649 = loc_334 + 1; + GibCursor after_tag_650 = loc_334 + 1; + + return (GibCursorGibCursorGibCursorProd) {end_r_335, loc_334, + after_tag_650}; + } else { + GibInt fltAppE_148_160 = len_25_104_158 - 1; + GibCursor loc_379 = loc_334 + 9; + + *(GibPackedTag *) loc_334 = 0; + + GibCursor writetag_658 = loc_334 + 1; + GibCursor after_tag_659 = loc_334 + 1; + + *(GibInt *) after_tag_659 = len_25_104_158; + + GibCursor writecur_663 = after_tag_659 + sizeof(GibInt); + GibCursorGibCursorGibCursorProd tmp_struct_0 = + mkConsIntList(end_r_335, loc_379, fltAppE_148_160); + GibCursor pvrtmp_1010 = tmp_struct_0.field0; + GibCursor pvrtmp_1011 = tmp_struct_0.field1; + GibCursor pvrtmp_1012 = tmp_struct_0.field2; + + return (GibCursorGibCursorGibCursorProd) {pvrtmp_1010, loc_334, + pvrtmp_1012}; + } +} +GibCursorGibCursorGibBoolProd checkMapAdd1(GibCursor end_r_338, + GibCursor end_r_339, + GibCursor lst_27_106_162, + GibCursor lst__28_107_163) +{ + GibPackedTag tmpval_1021 = *(GibPackedTag *) lst_27_106_162; + GibCursor tmpcur_1022 = lst_27_106_162 + 1; + + + switch_1042: + ; + switch (tmpval_1021) { + + case 1: + { + GibCursorGibBoolProd tmp_struct_4 = + caseFn_95(end_r_339, lst__28_107_163); + GibCursor pvrtmp_1023 = tmp_struct_4.field0; + GibBool pvrtmp_1024 = tmp_struct_4.field1; + + return (GibCursorGibCursorGibBoolProd) {end_r_338, pvrtmp_1023, + pvrtmp_1024}; + break; + } + + case 0: + { + GibInt tmpval_1025 = *(GibInt *) tmpcur_1022; + GibCursor tmpcur_1026 = tmpcur_1022 + sizeof(GibInt); + GibCursorGibCursorGibBoolProd tmp_struct_5 = + caseFn_97(end_r_339, end_r_338, lst__28_107_163, tmpval_1025, tmpcur_1026); + GibCursor pvrtmp_1027 = tmp_struct_5.field0; + GibCursor pvrtmp_1028 = tmp_struct_5.field1; + GibBool pvrtmp_1029 = tmp_struct_5.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1028, pvrtmp_1027, + pvrtmp_1029}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_7 = *(uintptr_t *) tmpcur_1022; + GibCursor tmpcur_1030 = GIB_UNTAG(tagged_tmpcur_7); + GibCursor tmpaftercur_1031 = tmpcur_1022 + 8; + uint16_t tmptag_1032 = GIB_GET_TAG(tagged_tmpcur_7); + GibCursor end_from_tagged_indr_510 = tmpcur_1030 + tmptag_1032; + GibCursor jump_512 = tmpcur_1022 + 8; + GibCursorGibCursorGibBoolProd tmp_struct_6 = + checkMapAdd1(end_from_tagged_indr_510, end_r_339, tmpcur_1030, lst__28_107_163); + GibCursor pvrtmp_1033 = tmp_struct_6.field0; + GibCursor pvrtmp_1034 = tmp_struct_6.field1; + GibBool pvrtmp_1035 = tmp_struct_6.field2; + + return (GibCursorGibCursorGibBoolProd) {end_r_338, pvrtmp_1034, + pvrtmp_1035}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_9 = *(uintptr_t *) tmpcur_1022; + GibCursor tmpcur_1036 = GIB_UNTAG(tagged_tmpcur_9); + GibCursor tmpaftercur_1037 = tmpcur_1022 + 8; + uint16_t tmptag_1038 = GIB_GET_TAG(tagged_tmpcur_9); + GibCursor end_from_tagged_indr_510 = tmpcur_1036 + tmptag_1038; + GibCursorGibCursorGibBoolProd tmp_struct_8 = + checkMapAdd1(end_from_tagged_indr_510, end_r_339, tmpcur_1036, lst__28_107_163); + GibCursor pvrtmp_1039 = tmp_struct_8.field0; + GibCursor pvrtmp_1040 = tmp_struct_8.field1; + GibBool pvrtmp_1041 = tmp_struct_8.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1039, pvrtmp_1040, + pvrtmp_1041}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1021"); + exit(1); + } + } +} +GibInt add1(GibInt x_33_110_166) +{ + GibInt tailprim_471 = x_33_110_166 + 1; + + return tailprim_471; +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd map_61(GibCursor end_r_342, + GibCursor end_r_343, + GibCursor loc_341, + GibCursor lst_35_111_167) +{ + if (loc_341 + 18 > end_r_343) { + gib_grow_region(&loc_341, &end_r_343); + } + + GibPackedTag tmpval_1043 = *(GibPackedTag *) lst_35_111_167; + GibCursor tmpcur_1044 = lst_35_111_167 + 1; + + + switch_1092: + ; + switch (tmpval_1043) { + + case 1: + { + GibCursor jump_472 = lst_35_111_167 + 1; + + *(GibPackedTag *) loc_341 = 1; + + GibCursor writetag_686 = loc_341 + 1; + GibCursor after_tag_687 = loc_341 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_342, + end_r_343, + jump_472, + loc_341, + after_tag_687}; + break; + } + + case 0: + { + GibInt tmpval_1049 = *(GibInt *) tmpcur_1044; + GibCursor tmpcur_1050 = tmpcur_1044 + sizeof(GibInt); + GibInt fltPkd_149_170 = add1(tmpval_1049); + GibCursor loc_402 = loc_341 + 9; + + *(GibPackedTag *) loc_341 = 0; + + GibCursor writetag_698 = loc_341 + 1; + GibCursor after_tag_699 = loc_341 + 1; + + *(GibInt *) after_tag_699 = fltPkd_149_170; + + GibCursor writecur_703 = after_tag_699 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_10 = + map_61(end_r_342, end_r_343, loc_402, tmpcur_1050); + GibCursor pvrtmp_1051 = tmp_struct_10.field0; + GibCursor pvrtmp_1052 = tmp_struct_10.field1; + GibCursor pvrtmp_1053 = tmp_struct_10.field2; + GibCursor pvrtmp_1054 = tmp_struct_10.field3; + GibCursor pvrtmp_1055 = tmp_struct_10.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1051, + pvrtmp_1052, + pvrtmp_1053, + loc_341, + pvrtmp_1055}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_12 = *(uintptr_t *) tmpcur_1044; + GibCursor tmpcur_1064 = GIB_UNTAG(tagged_tmpcur_12); + GibCursor tmpaftercur_1065 = tmpcur_1044 + 8; + uint16_t tmptag_1066 = GIB_GET_TAG(tagged_tmpcur_12); + GibCursor end_from_tagged_indr_515 = tmpcur_1064 + tmptag_1066; + GibCursor jump_517 = tmpcur_1044 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_11 = + map_61(end_from_tagged_indr_515, end_r_343, loc_341, tmpcur_1064); + GibCursor pvrtmp_1067 = tmp_struct_11.field0; + GibCursor pvrtmp_1068 = tmp_struct_11.field1; + GibCursor pvrtmp_1069 = tmp_struct_11.field2; + GibCursor pvrtmp_1070 = tmp_struct_11.field3; + GibCursor pvrtmp_1071 = tmp_struct_11.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_342, + pvrtmp_1068, + jump_517, + pvrtmp_1070, + pvrtmp_1071}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_14 = *(uintptr_t *) tmpcur_1044; + GibCursor tmpcur_1078 = GIB_UNTAG(tagged_tmpcur_14); + GibCursor tmpaftercur_1079 = tmpcur_1044 + 8; + uint16_t tmptag_1080 = GIB_GET_TAG(tagged_tmpcur_14); + GibCursor end_from_tagged_indr_515 = tmpcur_1078 + tmptag_1080; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_13 = + map_61(end_from_tagged_indr_515, end_r_343, loc_341, tmpcur_1078); + GibCursor pvrtmp_1081 = tmp_struct_13.field0; + GibCursor pvrtmp_1082 = tmp_struct_13.field1; + GibCursor pvrtmp_1083 = tmp_struct_13.field2; + GibCursor pvrtmp_1084 = tmp_struct_13.field3; + GibCursor pvrtmp_1085 = tmp_struct_13.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1081, + pvrtmp_1082, + pvrtmp_1083, + pvrtmp_1084, + pvrtmp_1085}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1043"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_ConsIntList(GibCursor end_r_346, + GibCursor end_r_347, + GibCursor loc_345, + GibCursor arg_69_114_172) +{ + if (loc_345 + 18 > end_r_347) { + gib_grow_region(&loc_345, &end_r_347); + } + + GibPackedTag tmpval_1093 = *(GibPackedTag *) arg_69_114_172; + GibCursor tmpcur_1094 = arg_69_114_172 + 1; + + + switch_1142: + ; + switch (tmpval_1093) { + + case 0: + { + GibInt tmpval_1095 = *(GibInt *) tmpcur_1094; + GibCursor tmpcur_1096 = tmpcur_1094 + sizeof(GibInt); + GibCursor loc_414 = loc_345 + 9; + + *(GibPackedTag *) loc_345 = 0; + + GibCursor writetag_722 = loc_345 + 1; + GibCursor after_tag_723 = loc_345 + 1; + + *(GibInt *) after_tag_723 = tmpval_1095; + + GibCursor writecur_727 = after_tag_723 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_18 = + _copy_ConsIntList(end_r_346, end_r_347, loc_414, tmpcur_1096); + GibCursor pvrtmp_1097 = tmp_struct_18.field0; + GibCursor pvrtmp_1098 = tmp_struct_18.field1; + GibCursor pvrtmp_1099 = tmp_struct_18.field2; + GibCursor pvrtmp_1100 = tmp_struct_18.field3; + GibCursor pvrtmp_1101 = tmp_struct_18.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1097, + pvrtmp_1098, + pvrtmp_1099, + loc_345, + pvrtmp_1101}; + break; + } + + case 1: + { + GibCursor jump_480 = arg_69_114_172 + 1; + + *(GibPackedTag *) loc_345 = 1; + + GibCursor writetag_732 = loc_345 + 1; + GibCursor after_tag_733 = loc_345 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_346, + end_r_347, + jump_480, + loc_345, + after_tag_733}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_20 = *(uintptr_t *) tmpcur_1094; + GibCursor tmpcur_1114 = GIB_UNTAG(tagged_tmpcur_20); + GibCursor tmpaftercur_1115 = tmpcur_1094 + 8; + uint16_t tmptag_1116 = GIB_GET_TAG(tagged_tmpcur_20); + GibCursor end_from_tagged_indr_521 = tmpcur_1114 + tmptag_1116; + GibCursor jump_523 = tmpcur_1094 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_19 = + _copy_ConsIntList(end_from_tagged_indr_521, end_r_347, loc_345, tmpcur_1114); + GibCursor pvrtmp_1117 = tmp_struct_19.field0; + GibCursor pvrtmp_1118 = tmp_struct_19.field1; + GibCursor pvrtmp_1119 = tmp_struct_19.field2; + GibCursor pvrtmp_1120 = tmp_struct_19.field3; + GibCursor pvrtmp_1121 = tmp_struct_19.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_346, + pvrtmp_1118, + jump_523, + pvrtmp_1120, + pvrtmp_1121}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_22 = *(uintptr_t *) tmpcur_1094; + GibCursor tmpcur_1128 = GIB_UNTAG(tagged_tmpcur_22); + GibCursor tmpaftercur_1129 = tmpcur_1094 + 8; + uint16_t tmptag_1130 = GIB_GET_TAG(tagged_tmpcur_22); + GibCursor end_from_tagged_indr_521 = tmpcur_1128 + tmptag_1130; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_21 = + _copy_ConsIntList(end_from_tagged_indr_521, end_r_347, loc_345, tmpcur_1128); + GibCursor pvrtmp_1131 = tmp_struct_21.field0; + GibCursor pvrtmp_1132 = tmp_struct_21.field1; + GibCursor pvrtmp_1133 = tmp_struct_21.field2; + GibCursor pvrtmp_1134 = tmp_struct_21.field3; + GibCursor pvrtmp_1135 = tmp_struct_21.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1131, + pvrtmp_1132, + pvrtmp_1133, + pvrtmp_1134, + pvrtmp_1135}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1093"); + exit(1); + } + } +} +GibCursorGibCursorGibCursorGibCursorGibCursorProd _copy_without_ptrs_ConsIntList(GibCursor end_r_350, + GibCursor end_r_351, + GibCursor loc_349, + GibCursor arg_74_119_177) +{ + GibPackedTag tmpval_1143 = *(GibPackedTag *) arg_74_119_177; + GibCursor tmpcur_1144 = arg_74_119_177 + 1; + + + switch_1192: + ; + switch (tmpval_1143) { + + case 0: + { + GibInt tmpval_1145 = *(GibInt *) tmpcur_1144; + GibCursor tmpcur_1146 = tmpcur_1144 + sizeof(GibInt); + GibCursor loc_427 = loc_349 + 9; + + *(GibPackedTag *) loc_349 = 0; + + GibCursor writetag_754 = loc_349 + 1; + GibCursor after_tag_755 = loc_349 + 1; + + *(GibInt *) after_tag_755 = tmpval_1145; + + GibCursor writecur_759 = after_tag_755 + sizeof(GibInt); + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_26 = + _copy_without_ptrs_ConsIntList(end_r_350, end_r_351, loc_427, tmpcur_1146); + GibCursor pvrtmp_1147 = tmp_struct_26.field0; + GibCursor pvrtmp_1148 = tmp_struct_26.field1; + GibCursor pvrtmp_1149 = tmp_struct_26.field2; + GibCursor pvrtmp_1150 = tmp_struct_26.field3; + GibCursor pvrtmp_1151 = tmp_struct_26.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1147, + pvrtmp_1148, + pvrtmp_1149, + loc_349, + pvrtmp_1151}; + break; + } + + case 1: + { + GibCursor jump_485 = arg_74_119_177 + 1; + + *(GibPackedTag *) loc_349 = 1; + + GibCursor writetag_764 = loc_349 + 1; + GibCursor after_tag_765 = loc_349 + 1; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_350, + end_r_351, + jump_485, + loc_349, + after_tag_765}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_28 = *(uintptr_t *) tmpcur_1144; + GibCursor tmpcur_1164 = GIB_UNTAG(tagged_tmpcur_28); + GibCursor tmpaftercur_1165 = tmpcur_1144 + 8; + uint16_t tmptag_1166 = GIB_GET_TAG(tagged_tmpcur_28); + GibCursor end_from_tagged_indr_527 = tmpcur_1164 + tmptag_1166; + GibCursor jump_529 = tmpcur_1144 + 8; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_27 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_527, end_r_351, loc_349, tmpcur_1164); + GibCursor pvrtmp_1167 = tmp_struct_27.field0; + GibCursor pvrtmp_1168 = tmp_struct_27.field1; + GibCursor pvrtmp_1169 = tmp_struct_27.field2; + GibCursor pvrtmp_1170 = tmp_struct_27.field3; + GibCursor pvrtmp_1171 = tmp_struct_27.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {end_r_350, + pvrtmp_1168, + jump_529, + pvrtmp_1170, + pvrtmp_1171}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_30 = *(uintptr_t *) tmpcur_1144; + GibCursor tmpcur_1178 = GIB_UNTAG(tagged_tmpcur_30); + GibCursor tmpaftercur_1179 = tmpcur_1144 + 8; + uint16_t tmptag_1180 = GIB_GET_TAG(tagged_tmpcur_30); + GibCursor end_from_tagged_indr_527 = tmpcur_1178 + tmptag_1180; + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_29 = + _copy_without_ptrs_ConsIntList(end_from_tagged_indr_527, end_r_351, loc_349, tmpcur_1178); + GibCursor pvrtmp_1181 = tmp_struct_29.field0; + GibCursor pvrtmp_1182 = tmp_struct_29.field1; + GibCursor pvrtmp_1183 = tmp_struct_29.field2; + GibCursor pvrtmp_1184 = tmp_struct_29.field3; + GibCursor pvrtmp_1185 = tmp_struct_29.field4; + + return (GibCursorGibCursorGibCursorGibCursorGibCursorProd) {pvrtmp_1181, + pvrtmp_1182, + pvrtmp_1183, + pvrtmp_1184, + pvrtmp_1185}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1143"); + exit(1); + } + } +} +GibCursorGibCursorProd _traverse_ConsIntList(GibCursor end_r_353, + GibCursor arg_79_124_182) +{ + GibPackedTag tmpval_1193 = *(GibPackedTag *) arg_79_124_182; + GibCursor tmpcur_1194 = arg_79_124_182 + 1; + + + switch_1209: + ; + switch (tmpval_1193) { + + case 0: + { + GibInt tmpval_1195 = *(GibInt *) tmpcur_1194; + GibCursor tmpcur_1196 = tmpcur_1194 + sizeof(GibInt); + GibCursorGibCursorProd tmp_struct_31 = + _traverse_ConsIntList(end_r_353, tmpcur_1196); + GibCursor pvrtmp_1197 = tmp_struct_31.field0; + GibCursor pvrtmp_1198 = tmp_struct_31.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1197, pvrtmp_1198}; + break; + } + + case 1: + { + GibCursor jump_490 = arg_79_124_182 + 1; + + return (GibCursorGibCursorProd) {end_r_353, jump_490}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_33 = *(uintptr_t *) tmpcur_1194; + GibCursor tmpcur_1199 = GIB_UNTAG(tagged_tmpcur_33); + GibCursor tmpaftercur_1200 = tmpcur_1194 + 8; + uint16_t tmptag_1201 = GIB_GET_TAG(tagged_tmpcur_33); + GibCursor end_from_tagged_indr_533 = tmpcur_1199 + tmptag_1201; + GibCursor jump_535 = tmpcur_1194 + 8; + GibCursorGibCursorProd tmp_struct_32 = + _traverse_ConsIntList(end_from_tagged_indr_533, tmpcur_1199); + GibCursor pvrtmp_1202 = tmp_struct_32.field0; + GibCursor pvrtmp_1203 = tmp_struct_32.field1; + + return (GibCursorGibCursorProd) {end_r_353, jump_535}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_35 = *(uintptr_t *) tmpcur_1194; + GibCursor tmpcur_1204 = GIB_UNTAG(tagged_tmpcur_35); + GibCursor tmpaftercur_1205 = tmpcur_1194 + 8; + uint16_t tmptag_1206 = GIB_GET_TAG(tagged_tmpcur_35); + GibCursor end_from_tagged_indr_533 = tmpcur_1204 + tmptag_1206; + GibCursorGibCursorProd tmp_struct_34 = + _traverse_ConsIntList(end_from_tagged_indr_533, tmpcur_1204); + GibCursor pvrtmp_1207 = tmp_struct_34.field0; + GibCursor pvrtmp_1208 = tmp_struct_34.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1207, pvrtmp_1208}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1193"); + exit(1); + } + } +} +GibCursorGibCursorProd _print_ConsIntList(GibCursor end_r_355, + GibCursor arg_84_128_186) +{ + GibPackedTag tmpval_1210 = *(GibPackedTag *) arg_84_128_186; + GibCursor tmpcur_1211 = arg_84_128_186 + 1; + + + switch_1226: + ; + switch (tmpval_1210) { + + case 0: + { + GibInt tmpval_1212 = *(GibInt *) tmpcur_1211; + GibCursor tmpcur_1213 = tmpcur_1211 + sizeof(GibInt); + unsigned char wildcard_89_131_189 = gib_print_symbol(969); + unsigned char wildcard_92_132_190 = gib_print_symbol(972); + unsigned char y_87_133_191 = printf("%ld", tmpval_1212); + unsigned char wildcard_91_134_192 = gib_print_symbol(972); + GibCursorGibCursorProd tmp_struct_36 = + _print_ConsIntList(end_r_355, tmpcur_1213); + GibCursor pvrtmp_1214 = tmp_struct_36.field0; + GibCursor pvrtmp_1215 = tmp_struct_36.field1; + unsigned char wildcard_90_136_194 = gib_print_symbol(967); + + return (GibCursorGibCursorProd) {pvrtmp_1214, pvrtmp_1215}; + break; + } + + case 1: + { + GibCursor jump_495 = arg_84_128_186 + 1; + unsigned char wildcard_93_137_195 = gib_print_symbol(968); + unsigned char wildcard_94_138_196 = gib_print_symbol(967); + + return (GibCursorGibCursorProd) {end_r_355, jump_495}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_38 = *(uintptr_t *) tmpcur_1211; + GibCursor tmpcur_1216 = GIB_UNTAG(tagged_tmpcur_38); + GibCursor tmpaftercur_1217 = tmpcur_1211 + 8; + uint16_t tmptag_1218 = GIB_GET_TAG(tagged_tmpcur_38); + GibCursor end_from_tagged_indr_539 = tmpcur_1216 + tmptag_1218; + GibCursor jump_541 = tmpcur_1211 + 8; + unsigned char wildcard_544 = gib_print_symbol(971); + GibCursorGibCursorProd tmp_struct_37 = + _print_ConsIntList(end_from_tagged_indr_539, tmpcur_1216); + GibCursor pvrtmp_1219 = tmp_struct_37.field0; + GibCursor pvrtmp_1220 = tmp_struct_37.field1; + + return (GibCursorGibCursorProd) {end_r_355, jump_541}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_40 = *(uintptr_t *) tmpcur_1211; + GibCursor tmpcur_1221 = GIB_UNTAG(tagged_tmpcur_40); + GibCursor tmpaftercur_1222 = tmpcur_1211 + 8; + uint16_t tmptag_1223 = GIB_GET_TAG(tagged_tmpcur_40); + GibCursor end_from_tagged_indr_539 = tmpcur_1221 + tmptag_1223; + unsigned char wildcard_544 = gib_print_symbol(970); + GibCursorGibCursorProd tmp_struct_39 = + _print_ConsIntList(end_from_tagged_indr_539, tmpcur_1221); + GibCursor pvrtmp_1224 = tmp_struct_39.field0; + GibCursor pvrtmp_1225 = tmp_struct_39.field1; + + return (GibCursorGibCursorProd) {pvrtmp_1224, pvrtmp_1225}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1210"); + exit(1); + } + } +} +GibCursorGibBoolProd caseFn_95(GibCursor end_r_357, + GibCursor lst__28_96_139_197) +{ + GibPackedTag tmpval_1227 = *(GibPackedTag *) lst__28_96_139_197; + GibCursor tmpcur_1228 = lst__28_96_139_197 + 1; + + + switch_1241: + ; + switch (tmpval_1227) { + + case 1: + { + return (GibCursorGibBoolProd) {end_r_357, true}; + break; + } + + case 0: + { + GibInt tmpval_1229 = *(GibInt *) tmpcur_1228; + GibCursor tmpcur_1230 = tmpcur_1228 + sizeof(GibInt); + + return (GibCursorGibBoolProd) {end_r_357, false}; + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_42 = *(uintptr_t *) tmpcur_1228; + GibCursor tmpcur_1231 = GIB_UNTAG(tagged_tmpcur_42); + GibCursor tmpaftercur_1232 = tmpcur_1228 + 8; + uint16_t tmptag_1233 = GIB_GET_TAG(tagged_tmpcur_42); + GibCursor end_from_tagged_indr_545 = tmpcur_1231 + tmptag_1233; + GibCursor jump_547 = tmpcur_1228 + 8; + GibCursorGibBoolProd tmp_struct_41 = + caseFn_95(end_from_tagged_indr_545, tmpcur_1231); + GibCursor pvrtmp_1234 = tmp_struct_41.field0; + GibBool pvrtmp_1235 = tmp_struct_41.field1; + + return (GibCursorGibBoolProd) {end_r_357, pvrtmp_1235}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_44 = *(uintptr_t *) tmpcur_1228; + GibCursor tmpcur_1236 = GIB_UNTAG(tagged_tmpcur_44); + GibCursor tmpaftercur_1237 = tmpcur_1228 + 8; + uint16_t tmptag_1238 = GIB_GET_TAG(tagged_tmpcur_44); + GibCursor end_from_tagged_indr_545 = tmpcur_1236 + tmptag_1238; + GibCursorGibBoolProd tmp_struct_43 = + caseFn_95(end_from_tagged_indr_545, tmpcur_1236); + GibCursor pvrtmp_1239 = tmp_struct_43.field0; + GibBool pvrtmp_1240 = tmp_struct_43.field1; + + return (GibCursorGibBoolProd) {pvrtmp_1239, pvrtmp_1240}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1227"); + exit(1); + } + } +} +GibCursorGibCursorGibBoolProd caseFn_97(GibCursor end_r_360, + GibCursor end_r_361, + GibCursor lst__28_98_142_200, + GibInt x_29_99_143_201, + GibCursor rst_30_100_144_202) +{ + GibPackedTag tmpval_1242 = *(GibPackedTag *) lst__28_98_142_200; + GibCursor tmpcur_1243 = lst__28_98_142_200 + 1; + + + switch_1261: + ; + switch (tmpval_1242) { + + case 1: + { + return (GibCursorGibCursorGibBoolProd) {end_r_360, end_r_361, + false}; + break; + } + + case 0: + { + GibInt tmpval_1244 = *(GibInt *) tmpcur_1243; + GibCursor tmpcur_1245 = tmpcur_1243 + sizeof(GibInt); + GibInt fltPrm_152_205 = x_29_99_143_201 + 1; + GibBool fltIf_151_206 = tmpval_1244 == fltPrm_152_205; + + if (fltIf_151_206) { + GibCursorGibCursorGibBoolProd tmp_struct_45 = + checkMapAdd1(end_r_361, end_r_360, rst_30_100_144_202, tmpcur_1245); + GibCursor pvrtmp_1246 = tmp_struct_45.field0; + GibCursor pvrtmp_1247 = tmp_struct_45.field1; + GibBool pvrtmp_1248 = tmp_struct_45.field2; + GibBool tailprim_505 = true && pvrtmp_1248; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1247, + pvrtmp_1246, + tailprim_505}; + } else { + return (GibCursorGibCursorGibBoolProd) {end_r_360, end_r_361, + false}; + } + break; + } + + case GIB_INDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_47 = *(uintptr_t *) tmpcur_1243; + GibCursor tmpcur_1249 = GIB_UNTAG(tagged_tmpcur_47); + GibCursor tmpaftercur_1250 = tmpcur_1243 + 8; + uint16_t tmptag_1251 = GIB_GET_TAG(tagged_tmpcur_47); + GibCursor end_from_tagged_indr_550 = tmpcur_1249 + tmptag_1251; + GibCursor jump_552 = tmpcur_1243 + 8; + GibCursorGibCursorGibBoolProd tmp_struct_46 = + caseFn_97(end_from_tagged_indr_550, end_r_361, tmpcur_1249, x_29_99_143_201, rst_30_100_144_202); + GibCursor pvrtmp_1252 = tmp_struct_46.field0; + GibCursor pvrtmp_1253 = tmp_struct_46.field1; + GibBool pvrtmp_1254 = tmp_struct_46.field2; + + return (GibCursorGibCursorGibBoolProd) {end_r_360, pvrtmp_1253, + pvrtmp_1254}; + break; + } + + case GIB_REDIRECTION_TAG: + { + uintptr_t tagged_tmpcur_49 = *(uintptr_t *) tmpcur_1243; + GibCursor tmpcur_1255 = GIB_UNTAG(tagged_tmpcur_49); + GibCursor tmpaftercur_1256 = tmpcur_1243 + 8; + uint16_t tmptag_1257 = GIB_GET_TAG(tagged_tmpcur_49); + GibCursor end_from_tagged_indr_550 = tmpcur_1255 + tmptag_1257; + GibCursorGibCursorGibBoolProd tmp_struct_48 = + caseFn_97(end_from_tagged_indr_550, end_r_361, tmpcur_1255, x_29_99_143_201, rst_30_100_144_202); + GibCursor pvrtmp_1258 = tmp_struct_48.field0; + GibCursor pvrtmp_1259 = tmp_struct_48.field1; + GibBool pvrtmp_1260 = tmp_struct_48.field2; + + return (GibCursorGibCursorGibBoolProd) {pvrtmp_1258, pvrtmp_1259, + pvrtmp_1260}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1242"); + exit(1); + } + } +} +int main(int argc, char **argv) +{ + int init_58 = gib_init(argc, argv); + + info_table_initialize(); + symbol_table_initialize(); + + GibChunk region_973 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_375 = region_973.start; + GibCursor end_r_375 = region_973.end; + GibCursorGibCursorGibCursorProd tmp_struct_50 = + mkConsIntList(end_r_375, r_375, 10000000); + GibCursor pvrtmp_974 = tmp_struct_50.field0; + GibCursor pvrtmp_975 = tmp_struct_50.field1; + GibCursor pvrtmp_976 = tmp_struct_50.field2; + GibChunk region_981 = + gib_alloc_region_on_heap(gib_get_inf_init_chunk_size()); + GibCursor r_374 = region_981.start; + GibCursor end_r_374 = region_981.end; + GibCursor pvrtmp_993; + GibCursor pvrtmp_994; + GibCursor pvrtmp_995; + GibVector *times_55 = gib_vector_alloc(gib_get_iters_param(), + sizeof(double)); + struct timespec begin_pvrtmp_993; + struct timespec end_pvrtmp_993; + + for (long long iters_pvrtmp_993 = 0; iters_pvrtmp_993 < + gib_get_iters_param(); iters_pvrtmp_993++) { + if (iters_pvrtmp_993 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_pvrtmp_993); + + GibCursorGibCursorGibCursorGibCursorGibCursorProd tmp_struct_51 = + map_61(pvrtmp_974, end_r_374, r_374, pvrtmp_975); + GibCursor pvrtmp_982 = tmp_struct_51.field0; + GibCursor pvrtmp_983 = tmp_struct_51.field1; + GibCursor pvrtmp_984 = tmp_struct_51.field2; + GibCursor pvrtmp_985 = tmp_struct_51.field3; + GibCursor pvrtmp_986 = tmp_struct_51.field4; + + pvrtmp_993 = pvrtmp_983; + pvrtmp_994 = pvrtmp_985; + pvrtmp_995 = pvrtmp_986; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_pvrtmp_993); + if (iters_pvrtmp_993 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_restore_state(); + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_52 = gib_difftimespecs(&begin_pvrtmp_993, + &end_pvrtmp_993); + + printf("itertime: %lf\n", itertime_52); + gib_vector_inplace_update(times_55, iters_pvrtmp_993, &itertime_52); + } + gib_vector_inplace_sort(times_55, gib_compare_doubles); + + double *tmp_56 = (double *) gib_vector_nth(times_55, gib_get_iters_param() / + 2); + double selftimed_54 = *tmp_56; + double batchtime_53 = gib_sum_timing_array(times_55); + + gib_print_timing_array(times_55); + gib_vector_free(times_55); + printf("ITERS: %ld\n", gib_get_iters_param()); + printf("SIZE: %ld\n", gib_get_size_param()); + printf("BATCHTIME: %e\n", batchtime_53); + printf("SELFTIMED: %e\n", selftimed_54); + + GibCursorGibCursorGibBoolProd tmp_struct_57 = + checkMapAdd1(pvrtmp_974, end_r_374, pvrtmp_975, pvrtmp_994); + GibCursor pvrtmp_1003 = tmp_struct_57.field0; + GibCursor pvrtmp_1004 = tmp_struct_57.field1; + GibBool pvrtmp_1005 = tmp_struct_57.field2; + + if (pvrtmp_1005) { + printf("#t"); + printf("\n"); + } else { + printf("#f"); + printf("\n"); + } + + int exit_59 = gib_exit(); + + return exit_59; +} \ No newline at end of file diff --git a/microbench/tail_recursion/Map.exe b/microbench/tail_recursion/Map.exe new file mode 100755 index 000000000..6ad6999d7 Binary files /dev/null and b/microbench/tail_recursion/Map.exe differ diff --git a/microbench/tail_recursion/MapOnVectorNoTail.exe b/microbench/tail_recursion/MapOnVectorNoTail.exe new file mode 100755 index 000000000..f9ac906d7 Binary files /dev/null and b/microbench/tail_recursion/MapOnVectorNoTail.exe differ diff --git a/microbench/tail_recursion/MapOnVectorNoTail.out b/microbench/tail_recursion/MapOnVectorNoTail.out new file mode 100644 index 000000000..6efb492a9 --- /dev/null +++ b/microbench/tail_recursion/MapOnVectorNoTail.out @@ -0,0 +1,15 @@ +itertime: 0.795381 +itertime: 0.626519 +itertime: 0.689542 +itertime: 0.729329 +itertime: 0.740375 +itertime: 0.756137 +itertime: 0.609261 +itertime: 0.644690 +itertime: 0.833984 +ITER TIMES: [0.609261, 0.626519, 0.644690, 0.689542, 0.729329, 0.740375, 0.756137, 0.795381, 0.833984] +ITERS: 9 +SIZE: 100000000 +BATCHTIME: 6.425218e+00 +SELFTIMED: 7.293295e-01 +'#( ) diff --git a/microbench/tail_recursion/MapOnVectorNoTail.s b/microbench/tail_recursion/MapOnVectorNoTail.s new file mode 100644 index 000000000..1653729e4 --- /dev/null +++ b/microbench/tail_recursion/MapOnVectorNoTail.s @@ -0,0 +1,2214 @@ + +MapOnVectorNoTail.exe: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: +_init(): + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 3f 00 00 mov 0x3fd1(%rip),%rax # 404fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 : + 401020: ff 35 ca 3f 00 00 push 0x3fca(%rip) # 404ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 3f 00 00 jmp *0x3fcc(%rip) # 404ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401030 : + 401030: ff 25 ca 3f 00 00 jmp *0x3fca(%rip) # 405000 + 401036: 68 00 00 00 00 push $0x0 + 40103b: e9 e0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401040 : + 401040: ff 25 c2 3f 00 00 jmp *0x3fc2(%rip) # 405008 + 401046: 68 01 00 00 00 push $0x1 + 40104b: e9 d0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401050 : + 401050: ff 25 ba 3f 00 00 jmp *0x3fba(%rip) # 405010 + 401056: 68 02 00 00 00 push $0x2 + 40105b: e9 c0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401060 : + 401060: ff 25 b2 3f 00 00 jmp *0x3fb2(%rip) # 405018 + 401066: 68 03 00 00 00 push $0x3 + 40106b: e9 b0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401070 : + 401070: ff 25 aa 3f 00 00 jmp *0x3faa(%rip) # 405020 + 401076: 68 04 00 00 00 push $0x4 + 40107b: e9 a0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401080 : + 401080: ff 25 a2 3f 00 00 jmp *0x3fa2(%rip) # 405028 + 401086: 68 05 00 00 00 push $0x5 + 40108b: e9 90 ff ff ff jmp 401020 <_init+0x20> + +0000000000401090 : + 401090: ff 25 9a 3f 00 00 jmp *0x3f9a(%rip) # 405030 + 401096: 68 06 00 00 00 push $0x6 + 40109b: e9 80 ff ff ff jmp 401020 <_init+0x20> + +00000000004010a0 : + 4010a0: ff 25 92 3f 00 00 jmp *0x3f92(%rip) # 405038 + 4010a6: 68 07 00 00 00 push $0x7 + 4010ab: e9 70 ff ff ff jmp 401020 <_init+0x20> + +00000000004010b0 : + 4010b0: ff 25 8a 3f 00 00 jmp *0x3f8a(%rip) # 405040 + 4010b6: 68 08 00 00 00 push $0x8 + 4010bb: e9 60 ff ff ff jmp 401020 <_init+0x20> + +00000000004010c0 : + 4010c0: ff 25 82 3f 00 00 jmp *0x3f82(%rip) # 405048 + 4010c6: 68 09 00 00 00 push $0x9 + 4010cb: e9 50 ff ff ff jmp 401020 <_init+0x20> + +00000000004010d0 <__assert_fail@plt>: + 4010d0: ff 25 7a 3f 00 00 jmp *0x3f7a(%rip) # 405050 <__assert_fail@GLIBC_2.2.5> + 4010d6: 68 0a 00 00 00 push $0xa + 4010db: e9 40 ff ff ff jmp 401020 <_init+0x20> + +00000000004010e0 : + 4010e0: ff 25 72 3f 00 00 jmp *0x3f72(%rip) # 405058 + 4010e6: 68 0b 00 00 00 push $0xb + 4010eb: e9 30 ff ff ff jmp 401020 <_init+0x20> + +00000000004010f0 : + 4010f0: ff 25 6a 3f 00 00 jmp *0x3f6a(%rip) # 405060 + 4010f6: 68 0c 00 00 00 push $0xc + 4010fb: e9 20 ff ff ff jmp 401020 <_init+0x20> + +0000000000401100 : + 401100: ff 25 62 3f 00 00 jmp *0x3f62(%rip) # 405068 + 401106: 68 0d 00 00 00 push $0xd + 40110b: e9 10 ff ff ff jmp 401020 <_init+0x20> + +0000000000401110 : + 401110: ff 25 5a 3f 00 00 jmp *0x3f5a(%rip) # 405070 + 401116: 68 0e 00 00 00 push $0xe + 40111b: e9 00 ff ff ff jmp 401020 <_init+0x20> + +0000000000401120 : + 401120: ff 25 52 3f 00 00 jmp *0x3f52(%rip) # 405078 + 401126: 68 0f 00 00 00 push $0xf + 40112b: e9 f0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401130 : + 401130: ff 25 4a 3f 00 00 jmp *0x3f4a(%rip) # 405080 + 401136: 68 10 00 00 00 push $0x10 + 40113b: e9 e0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401140 : + 401140: ff 25 42 3f 00 00 jmp *0x3f42(%rip) # 405088 + 401146: 68 11 00 00 00 push $0x11 + 40114b: e9 d0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401150 : + 401150: ff 25 3a 3f 00 00 jmp *0x3f3a(%rip) # 405090 + 401156: 68 12 00 00 00 push $0x12 + 40115b: e9 c0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401160 : + 401160: ff 25 32 3f 00 00 jmp *0x3f32(%rip) # 405098 + 401166: 68 13 00 00 00 push $0x13 + 40116b: e9 b0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401170 : + 401170: ff 25 2a 3f 00 00 jmp *0x3f2a(%rip) # 4050a0 + 401176: 68 14 00 00 00 push $0x14 + 40117b: e9 a0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401180 : + 401180: ff 25 22 3f 00 00 jmp *0x3f22(%rip) # 4050a8 + 401186: 68 15 00 00 00 push $0x15 + 40118b: e9 90 fe ff ff jmp 401020 <_init+0x20> + +0000000000401190 : + 401190: ff 25 1a 3f 00 00 jmp *0x3f1a(%rip) # 4050b0 + 401196: 68 16 00 00 00 push $0x16 + 40119b: e9 80 fe ff ff jmp 401020 <_init+0x20> + +Disassembly of section .text: + +00000000004011a0
: +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:145 + + return tailapp_669; + } +} +int main(int argc, char **argv) +{ + 4011a0: 41 57 push %r15 + 4011a2: 41 56 push %r14 + 4011a4: 41 55 push %r13 + 4011a6: 41 54 push %r12 + 4011a8: 55 push %rbp + 4011a9: 53 push %rbx + 4011aa: 89 fb mov %edi,%ebx + 4011ac: 48 83 ec 58 sub $0x58,%rsp + 4011b0: 48 89 74 24 08 mov %rsi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1900 + // Print the GC configuration. + gib_print_gc_config(); +#endif + + // Ensure that C and Rust agree on sizes of structs that cross the boundary. + gib_check_rust_struct_sizes(); + 4011b5: e8 b6 0f 00 00 call 402170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1909 + // num iterations: How many times to repeat a benchmark. + // tree size: An integer passes to `build_tree()`. + + struct rlimit lim; + int code; + if ( (code = getrlimit(RLIMIT_STACK, &lim)) ) { + 4011ba: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 4011bf: bf 03 00 00 00 mov $0x3,%edi + 4011c4: e8 c7 ff ff ff call 401190 + 4011c9: 89 44 24 04 mov %eax,0x4(%rsp) + 4011cd: 85 c0 test %eax,%eax + 4011cf: 0f 85 51 0a 00 00 jne 401c26 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1914 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + exit(1); + } + + lim.rlim_cur = 4 * 1024LU * 1024LU * 1024LU; // 1GB stack. + 4011d5: 48 b8 00 00 00 00 01 movabs $0x100000000,%rax + 4011dc: 00 00 00 + 4011df: 48 89 44 24 40 mov %rax,0x40(%rsp) + 4011e4: eb 3b jmp 401221 + 4011e6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4011ed: 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1922 + + // WARNING: Haven't yet figured out why this doesn't work on MacOS... +#ifndef __APPLE__ + code = setrlimit(RLIMIT_STACK, &lim); + while (code) { + fprintf(stderr, " [gibbon rts] Failed to set stack size to %lu, code %d\n", + 4011f0: 48 8b 54 24 40 mov 0x40(%rsp),%rdx + 4011f5: 48 8b 3d 04 3f 00 00 mov 0x3f04(%rip),%rdi # 405100 + 4011fc: be 20 35 40 00 mov $0x403520,%esi + 401201: 31 c0 xor %eax,%eax + 401203: e8 08 ff ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1924 + (uint64_t)lim.rlim_cur, code); + lim.rlim_cur /= 2; + 401208: 48 8b 44 24 40 mov 0x40(%rsp),%rax + 40120d: 48 d1 e8 shr $1,%rax + 401210: 48 89 44 24 40 mov %rax,0x40(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1926 + // lim.rlim_max /= 2; + if(lim.rlim_cur < 100 * 1024) { + 401215: 48 3d ff 8f 01 00 cmp $0x18fff,%rax + 40121b: 0f 86 ba 02 00 00 jbe 4014db +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1920 + code = setrlimit(RLIMIT_STACK, &lim); + 401221: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401226: bf 03 00 00 00 mov $0x3,%edi + 40122b: e8 10 ff ff ff call 401140 + 401230: 89 c1 mov %eax,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1921 + while (code) { + 401232: 85 c0 test %eax,%eax + 401234: 75 ba jne 4011f0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 +#endif + + // int got_numargs = argc; // How many numeric arguments have we got. + + int i; + for (i = 1; i < argc; ++i) + 401236: 83 fb 01 cmp $0x1,%ebx + 401239: 0f 8e bc 02 00 00 jle 4014fb + 40123f: 48 8b 44 24 08 mov 0x8(%rsp),%rax + 401244: 8d 6b fe lea -0x2(%rbx),%ebp + 401247: 41 be 02 00 00 00 mov $0x2,%r14d + 40124d: 41 bf 01 00 00 00 mov $0x1,%r15d + 401253: 83 e5 fe and $0xfffffffe,%ebp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + check_args(i, argc, argv, "--array-input-length"); + gib_global_arrayfile_length_param = atoll(argv[i+1]); + i++; + } + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 401256: 44 8d 63 ff lea -0x1(%rbx),%r12d + 40125a: 4c 8d 68 10 lea 0x10(%rax),%r13 + 40125e: 83 c5 03 add $0x3,%ebp + 401261: eb 43 jmp 4012a6 + 401263: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 401268: 45 39 fc cmp %r15d,%r12d + 40126b: 0f 8e cf 00 00 00 jle 401340 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401271: 44 39 f3 cmp %r14d,%ebx + 401274: 0f 8e 7b 08 00 00 jle 401af5 +/usr/include/stdlib.h:376 + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); + 40127a: 49 8b 7d 00 mov 0x0(%r13),%rdi + 40127e: ba 0a 00 00 00 mov $0xa,%edx + 401283: 31 f6 xor %esi,%esi + 401285: e8 76 fe ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1945 + gib_global_biginf_init_chunk_size = atoll(argv[i + 1]); + 40128a: 48 89 05 3f 3e 00 00 mov %rax,0x3e3f(%rip) # 4050d0 + 401291: 41 83 c7 02 add $0x2,%r15d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 + for (i = 1; i < argc; ++i) + 401295: 41 83 c6 02 add $0x2,%r14d + 401299: 49 83 c5 10 add $0x10,%r13 + 40129d: 41 39 ef cmp %ebp,%r15d + 4012a0: 0f 84 55 02 00 00 je 4014fb +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1939 + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + 4012a6: 4d 8b 45 f8 mov -0x8(%r13),%r8 + 4012aa: 41 80 38 2d cmpb $0x2d,(%r8) + 4012ae: 75 12 jne 4012c2 + 4012b0: 41 80 78 01 68 cmpb $0x68,0x1(%r8) + 4012b5: 75 0b jne 4012c2 + 4012b7: 41 80 78 02 00 cmpb $0x0,0x2(%r8) + 4012bc: 0f 84 83 01 00 00 je 401445 + 4012c2: bf 54 36 40 00 mov $0x403654,%edi + 4012c7: b9 07 00 00 00 mov $0x7,%ecx + 4012cc: 4c 89 c6 mov %r8,%rsi + 4012cf: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4012d1: 0f 97 c0 seta %al + 4012d4: 1c 00 sbb $0x0,%al + 4012d6: 84 c0 test %al,%al + 4012d8: 0f 84 67 01 00 00 je 401445 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 4012de: bf 5b 36 40 00 mov $0x40365b,%edi + 4012e3: b9 15 00 00 00 mov $0x15,%ecx + 4012e8: 4c 89 c6 mov %r8,%rsi + 4012eb: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4012ed: 0f 97 c0 seta %al + 4012f0: 1c 00 sbb $0x0,%al + 4012f2: 84 c0 test %al,%al + 4012f4: 0f 84 6e ff ff ff je 401268 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1948 + else if (strcmp(argv[i], "--inf-buffer-size") == 0 && i < argc - 1) { + 4012fa: bf 70 36 40 00 mov $0x403670,%edi + 4012ff: b9 12 00 00 00 mov $0x12,%ecx + 401304: 4c 89 c6 mov %r8,%rsi + 401307: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 401309: 0f 97 c0 seta %al + 40130c: 1c 00 sbb $0x0,%al + 40130e: 84 c0 test %al,%al + 401310: 75 2e jne 401340 + 401312: 45 39 fc cmp %r15d,%r12d + 401315: 7e 29 jle 401340 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401317: 44 39 f3 cmp %r14d,%ebx + 40131a: 0f 8e c1 07 00 00 jle 401ae1 +/usr/include/stdlib.h:376 + 401320: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401324: ba 0a 00 00 00 mov $0xa,%edx + 401329: 31 f6 xor %esi,%esi + 40132b: e8 d0 fd ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1950 + gib_global_inf_init_chunk_size = atoll(argv[i + 1]); + 401330: 48 89 05 91 3d 00 00 mov %rax,0x3d91(%rip) # 4050c8 + 401337: e9 55 ff ff ff jmp 401291 + 40133c: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1953 + else if ((strcmp(argv[i], "--bench-input") == 0)) { + 401340: bf 82 36 40 00 mov $0x403682,%edi + 401345: b9 0e 00 00 00 mov $0xe,%ecx + 40134a: 4c 89 c6 mov %r8,%rsi + 40134d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40134f: 0f 97 c0 seta %al + 401352: 1c 00 sbb $0x0,%al + 401354: 84 c0 test %al,%al + 401356: 75 18 jne 401370 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401358: 44 39 f3 cmp %r14d,%ebx + 40135b: 0f 8f 30 ff ff ff jg 401291 + 401361: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401366: be 82 36 40 00 mov $0x403682,%esi + 40136b: e8 a0 0d 00 00 call 402110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1958 + else if ((strcmp(argv[i], "--array-input") == 0)) { + 401370: bf 90 36 40 00 mov $0x403690,%edi + 401375: b9 0e 00 00 00 mov $0xe,%ecx + 40137a: 4c 89 c6 mov %r8,%rsi + 40137d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40137f: 0f 97 c0 seta %al + 401382: 1c 00 sbb $0x0,%al + 401384: 84 c0 test %al,%al + 401386: 75 18 jne 4013a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401388: 44 39 f3 cmp %r14d,%ebx + 40138b: 0f 8f 00 ff ff ff jg 401291 + 401391: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401396: be 90 36 40 00 mov $0x403690,%esi + 40139b: e8 70 0d 00 00 call 402110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1963 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + 4013a0: bf 9e 36 40 00 mov $0x40369e,%edi + 4013a5: b9 15 00 00 00 mov $0x15,%ecx + 4013aa: 4c 89 c6 mov %r8,%rsi + 4013ad: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013af: 0f 97 c0 seta %al + 4013b2: 1c 00 sbb $0x0,%al + 4013b4: 84 c0 test %al,%al + 4013b6: 75 28 jne 4013e0 + 4013b8: 45 39 fc cmp %r15d,%r12d + 4013bb: 7e 4b jle 401408 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 4013bd: 44 39 f3 cmp %r14d,%ebx + 4013c0: 0f 8e da 07 00 00 jle 401ba0 +/usr/include/stdlib.h:376 + 4013c6: 49 8b 7d 00 mov 0x0(%r13),%rdi + 4013ca: ba 0a 00 00 00 mov $0xa,%edx + 4013cf: 31 f6 xor %esi,%esi + 4013d1: e8 2a fd ff ff call 401100 + 4013d6: e9 b6 fe ff ff jmp 401291 + 4013db: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 4013e0: bf b3 36 40 00 mov $0x4036b3,%edi + 4013e5: b9 0d 00 00 00 mov $0xd,%ecx + 4013ea: 4c 89 c6 mov %r8,%rsi + 4013ed: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013ef: 0f 97 c0 seta %al + 4013f2: 1c 00 sbb $0x0,%al + 4013f4: 84 c0 test %al,%al + 4013f6: 75 10 jne 401408 + 4013f8: 45 39 fc cmp %r15d,%r12d + 4013fb: 0f 8f 8f 00 00 00 jg 401490 + 401401: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1975 + int len = strlen(argv[i+1]); + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + strncpy(gib_global_bench_prog_param,argv[i+1],len); + i++; + } + else if ((strcmp(argv[i], "--iterate") == 0)) { + 401408: bf c0 36 40 00 mov $0x4036c0,%edi + 40140d: b9 0a 00 00 00 mov $0xa,%ecx + 401412: 4c 89 c6 mov %r8,%rsi + 401415: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 401417: 0f 97 c0 seta %al + 40141a: 1c 00 sbb $0x0,%al + 40141c: 84 c0 test %al,%al + 40141e: 75 36 jne 401456 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401420: 44 39 f3 cmp %r14d,%ebx + 401423: 0f 8e 3d 07 00 00 jle 401b66 +/usr/include/stdlib.h:376 + 401429: 49 8b 7d 00 mov 0x0(%r13),%rdi + 40142d: ba 0a 00 00 00 mov $0xa,%edx + 401432: 31 f6 xor %esi,%esi + 401434: e8 c7 fc ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1977 + check_args(i, argc, argv, "--iterate"); + gib_global_iters_param = atoll(argv[i+1]); + 401439: 48 89 05 98 3c 00 00 mov %rax,0x3c98(%rip) # 4050d8 + 401440: e9 4c fe ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1940 + gib_show_usage(argv); + 401445: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 40144a: e8 01 09 00 00 call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1941 + exit(0); + 40144f: 31 ff xor %edi,%edi + 401451: e8 1a fd ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1980 + i++; + } + else if ((strcmp(argv[i], "--size-param") == 0)) { + 401456: be ca 36 40 00 mov $0x4036ca,%esi + 40145b: 4c 89 c7 mov %r8,%rdi + 40145e: e8 8d fc ff ff call 4010f0 + 401463: 85 c0 test %eax,%eax + 401465: 0f 85 53 07 00 00 jne 401bbe +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40146b: 44 39 f3 cmp %r14d,%ebx + 40146e: 0f 8e 3b 07 00 00 jle 401baf +/usr/include/stdlib.h:376 + 401474: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401478: ba 0a 00 00 00 mov $0xa,%edx + 40147d: 31 f6 xor %esi,%esi + 40147f: e8 7c fc ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1982 + check_args(i, argc, argv, "--size-param"); + gib_global_size_param = atoll(argv[i+1]); + 401484: 48 89 05 55 3c 00 00 mov %rax,0x3c55(%rip) # 4050e0 + 40148b: e9 01 fe ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401490: 44 39 f3 cmp %r14d,%ebx + 401493: 0f 8e 7e 07 00 00 jle 401c17 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1970 + int len = strlen(argv[i+1]); + 401499: 49 8b 75 00 mov 0x0(%r13),%rsi + 40149d: 48 89 f7 mov %rsi,%rdi + 4014a0: 48 89 74 24 18 mov %rsi,0x18(%rsp) + 4014a5: e8 f6 fb ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 4014aa: 8d 78 01 lea 0x1(%rax),%edi + 4014ad: 48 89 44 24 10 mov %rax,0x10(%rsp) + 4014b2: 48 63 ff movslq %edi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4014b5: e8 76 fc ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 4014ba: 48 8b 54 24 10 mov 0x10(%rsp),%rdx + 4014bf: 48 8b 74 24 18 mov 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4014c4: 48 89 c7 mov %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 4014c7: 48 89 05 6a 3c 00 00 mov %rax,0x3c6a(%rip) # 405138 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 4014ce: 48 63 d2 movslq %edx,%rdx + 4014d1: e8 7a fb ff ff call 401050 + 4014d6: e9 b6 fd ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1927 + fprintf(stderr, " [gibbon rts] Failed setrlimit stack size to something reasonable; giving up.\n"); + 4014db: ba 4e 00 00 00 mov $0x4e,%edx + 4014e0: be 01 00 00 00 mov $0x1,%esi + 4014e5: bf 58 35 40 00 mov $0x403558,%edi + 4014ea: 48 8b 0d 0f 3c 00 00 mov 0x3c0f(%rip),%rcx # 405100 + 4014f1: e8 8a fc ff ff call 401180 + 4014f6: e9 3b fd ff ff jmp 401236 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1996 + } + } + + // Initialize gib_global_bench_prog_param to an empty string in case + // the runtime argument --bench-prog isn't passed. + if (gib_global_bench_prog_param == NULL) { + 4014fb: 48 83 3d 35 3c 00 00 cmpq $0x0,0x3c35(%rip) # 405138 + 401502: 00 + 401503: 0f 84 a7 05 00 00 je 401ab0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401509: bf f0 00 00 00 mov $0xf0,%edi + 40150e: e8 1d fc ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401513: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401517: 66 0f ef c9 pxor %xmm1,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40151b: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1587 + stats->gc_zct_mgmt_time = 0; + 401520: 48 c7 80 b0 00 00 00 movq $0x0,0xb0(%rax) + 401527: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1594 + stats->rootset_size = 0; + 40152b: 48 c7 80 e8 00 00 00 movq $0x0,0xe8(%rax) + 401532: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401536: 0f 11 00 movups %xmm0,(%rax) + 401539: 0f 11 40 10 movups %xmm0,0x10(%rax) + 40153d: 0f 11 40 20 movups %xmm0,0x20(%rax) + 401541: 0f 11 40 30 movups %xmm0,0x30(%rax) + 401545: 0f 11 40 40 movups %xmm0,0x40(%rax) + 401549: 0f 11 40 50 movups %xmm0,0x50(%rax) + 40154d: 0f 11 40 60 movups %xmm0,0x60(%rax) + 401551: 0f 11 40 70 movups %xmm0,0x70(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401555: 0f 11 88 80 00 00 00 movups %xmm1,0x80(%rax) + 40155c: 0f 11 88 90 00 00 00 movups %xmm1,0x90(%rax) + 401563: 0f 11 88 a0 00 00 00 movups %xmm1,0xa0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1588 + stats->fwd_env_size = 0; + 40156a: 0f 11 80 b8 00 00 00 movups %xmm0,0xb8(%rax) + 401571: 0f 11 80 c8 00 00 00 movups %xmm0,0xc8(%rax) + 401578: 0f 11 80 d8 00 00 00 movups %xmm0,0xd8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1338 + gib_global_gc_stats = (GibGcStats *) gib_alloc(sizeof(GibGcStats)); + 40157f: 48 89 05 8a 3b 00 00 mov %rax,0x3b8a(%rip) # 405110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401586: e8 a5 fb ff ff call 401130 + 40158b: bf 00 00 40 00 mov $0x400000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1420 + nursery->heap_size = nsize; + 401590: 48 c7 00 00 00 40 00 movq $0x400000,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401597: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1343 + gib_global_nurseries = (GibNursery *) gib_alloc(gib_global_num_threads * + 40159a: 48 89 05 8f 3b 00 00 mov %rax,0x3b8f(%rip) # 405130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015a1: e8 8a fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1421 + nursery->heap_start = (char *) gib_alloc(nsize); + 4015a6: 48 89 43 08 mov %rax,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1422 + if (nursery->heap_start == NULL) { + 4015aa: 48 85 c0 test %rax,%rax + 4015ad: 0f 84 93 05 00 00 je 401b46 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4015b3: 48 05 00 00 40 00 add $0x400000,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015b9: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4015be: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1428 + nursery->alloc = nursery->heap_end; + 4015c2: 48 89 43 18 mov %rax,0x18(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015c6: e8 65 fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4015cb: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015cf: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4015d4: 0f 11 40 08 movups %xmm0,0x8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015d8: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1350 + gib_global_oldgen = (GibOldgen *) gib_alloc(sizeof(GibOldgen)); + 4015db: 48 89 05 36 3b 00 00 mov %rax,0x3b36(%rip) # 405118 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015e2: e8 49 fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1457 + oldgen->rem_set = (GibRememberedSet *) gib_alloc(sizeof(GibRememberedSet)); + 4015e7: 48 89 45 00 mov %rax,0x0(%rbp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015eb: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1458 + if (oldgen->rem_set == NULL) { + 4015ee: 48 85 c0 test %rax,%rax + 4015f1: 0f 84 7e 05 00 00 je 401b75 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015f7: bf 00 00 00 06 mov $0x6000000,%edi + 4015fc: e8 2f fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401601: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401604: 48 85 c0 test %rax,%rax + 401607: 0f 84 e3 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40160d: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401614: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401618: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40161d: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401621: e8 0a fb ff ff call 401130 + 401626: bf 18 00 00 00 mov $0x18,%edi + 40162b: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1355 + gib_global_read_shadowstacks = + 40162e: 48 89 05 f3 3a 00 00 mov %rax,0x3af3(%rip) # 405128 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401635: e8 f6 fa ff ff call 401130 + 40163a: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1358 + gib_global_write_shadowstacks = + 40163f: 48 89 05 da 3a 00 00 mov %rax,0x3ada(%rip) # 405120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401646: 48 89 c3 mov %rax,%rbx + 401649: e8 e2 fa ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 40164e: 49 89 04 24 mov %rax,(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401652: 48 85 c0 test %rax,%rax + 401655: 0f 84 95 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40165b: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401662: 49 89 44 24 10 mov %rax,0x10(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401667: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40166c: 49 89 54 24 08 mov %rdx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401671: e8 ba fa ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401676: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401679: 48 85 c0 test %rax,%rax + 40167c: 0f 84 6e 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401682: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401689: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + +#ifndef _GIBBON_POINTER + // Initialize the nursery and shadow stack. + gib_storage_initialize(); + GibOldgen *oldgen = DEFAULT_GENERATION; + gib_init_zcts(oldgen); + 40168d: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401690: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + gib_init_zcts(oldgen); + 401694: e8 c7 f9 ff ff call 401060 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2017 + + // Minimal test to see if FFI is set up correctly. + gib_check_rust_struct_sizes(); + 401699: e8 d2 0a 00 00 call 402170 +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:70 + int error = gib_info_table_initialize(7); + 40169e: bf 07 00 00 00 mov $0x7,%edi + 4016a3: e8 38 fa ff ff call 4010e0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:72 + if (error < 0) { + 4016a8: 85 c0 test %eax,%eax + 4016aa: 0f 88 d1 04 00 00 js 401b81 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:79 + gib_info_table_finalize(); + 4016b0: e8 ab fa ff ff call 401160 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:78 + return gib_global_size_param; + 4016b5: 4c 8b 3d 24 3a 00 00 mov 0x3a24(%rip),%r15 # 4050e0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:93 + if (fltIf_612_633) { + 4016bc: 41 be 00 00 00 00 mov $0x0,%r14d + 4016c2: 4d 85 ff test %r15,%r15 + 4016c5: 4d 0f 49 f7 cmovns %r15,%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:155 + + GibInt n_6_549_620 = gib_get_size_param(); + GibInt n_16_573_596_621 = gib_get_size_param(); + GibInt n__19_575_598_623 = maxInt(n_16_573_596_621, 0); + GibInt tmp_7 = sizeof(GibInt); + GibVector *vec_20_576_599_624 = gib_vector_alloc(n__19_575_598_623, tmp_7); + 4016c9: 4c 89 f7 mov %r14,%rdi + 4016cc: e8 9f 09 00 00 call 402070 + 4016d1: 49 89 c4 mov %rax,%r12 +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 4016d4: 4d 85 ff test %r15,%r15 + 4016d7: 7e 13 jle 4016ec + 4016d9: 4c 89 f9 mov %r15,%rcx + 4016dc: 4c 89 f2 mov %r14,%rdx + 4016df: 31 f6 xor %esi,%esi + 4016e1: 48 89 c7 mov %rax,%rdi + 4016e4: e8 27 07 00 00 call 401e10 + 4016e9: 49 89 c4 mov %rax,%r12 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *vec1_21_577_600_625 = + generate_loop_398_533(vec_20_576_599_624, 0, n__19_575_598_623, n_6_549_620); + GibVector *timed_671; + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 4016ec: 48 8b 3d e5 39 00 00 mov 0x39e5(%rip),%rdi # 4050d8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + sizeof(double)); + struct timespec begin_timed_671; + struct timespec end_timed_671; + + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4016f3: 45 31 f6 xor %r14d,%r14d +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 4016f6: e8 75 09 00 00 call 402070 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4016fb: 48 83 3d d5 39 00 00 cmpq $0x0,0x39d5(%rip) # 4050d8 + 401702: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 401703: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 401706: 0f 8e b8 01 00 00 jle 4018c4 + 40170c: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:170 + iters_timed_671++) { + if (iters_timed_671 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_671); + 401710: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401715: bf 04 00 00 00 mov $0x4,%edi + 40171a: 41 bf 00 00 00 00 mov $0x0,%r15d + 401720: e8 6b f9 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401725: 49 8b 5c 24 08 mov 0x8(%r12),%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40172a: bf 20 00 00 00 mov $0x20,%edi + 40172f: 49 2b 1c 24 sub (%r12),%rbx + 401733: 4c 0f 49 fb cmovns %rbx,%r15 + 401737: e8 f4 f9 ff ff call 401130 + 40173c: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 40173f: 48 85 c0 test %rax,%rax + 401742: 0f 84 dc 03 00 00 je 401b24 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 401748: 4a 8d 3c fd 00 00 00 lea 0x0(,%r15,8),%rdi + 40174f: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401750: e8 db f9 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 401755: 48 85 c0 test %rax,%rax + 401758: 0f 84 a6 03 00 00 je 401b04 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 40175e: 49 c7 45 00 00 00 00 movq $0x0,0x0(%r13) + 401765: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 401766: 4d 89 7d 08 mov %r15,0x8(%r13) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 40176a: 49 c7 45 10 08 00 00 movq $0x8,0x10(%r13) + 401771: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 401772: 49 89 45 18 mov %rax,0x18(%r13) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401776: 48 85 db test %rbx,%rbx + 401779: 0f 8e c1 00 00 00 jle 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40177f: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401784: 49 0f af 14 24 imul (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401789: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 40178e: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401792: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401796: 48 89 10 mov %rdx,(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401799: 48 83 fb 01 cmp $0x1,%rbx + 40179d: 0f 84 9d 00 00 00 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017a3: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017a7: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017ac: 48 83 c2 01 add $0x1,%rdx + 4017b0: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 4017b6: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 4017ba: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4017be: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 4017c2: 48 83 fb 02 cmp $0x2,%rbx + 4017c6: 74 78 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017c8: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017cc: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017d1: 48 83 c2 02 add $0x2,%rdx + 4017d5: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 4017db: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 4017df: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4017e3: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 4017e7: 48 83 fb 03 cmp $0x3,%rbx + 4017eb: 74 53 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017ed: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017f1: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017f6: 48 83 c2 03 add $0x3,%rdx + 4017fa: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401800: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401804: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401808: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 40180c: 48 83 fb 04 cmp $0x4,%rbx + 401810: 74 2e je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401812: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401816: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40181b: 48 83 c2 04 add $0x4,%rdx + 40181f: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401825: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401829: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40182d: 48 89 50 20 mov %rdx,0x20(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401831: 48 83 fb 05 cmp $0x5,%rbx + 401835: 0f 85 8e 02 00 00 jne 401ac9 + 40183b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:181 + tmp_1); + GibVector *vec1_21_590_648_664 = + generate_loop_398_536(vec_20_589_647_663, 0, n__19_588_646_662, vec1_21_577_600_625); + + timed_671 = vec1_21_590_648_664; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_671); + 401840: 48 8d 74 24 30 lea 0x30(%rsp),%rsi + 401845: bf 04 00 00 00 mov $0x4,%edi + 40184a: e8 41 f8 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40184f: 48 8b 44 24 38 mov 0x38(%rsp),%rax + 401854: 66 0f ef c0 pxor %xmm0,%xmm0 + 401858: 48 2b 44 24 48 sub 0x48(%rsp),%rax + 40185d: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 401862: 66 0f ef c9 pxor %xmm1,%xmm1 + 401866: 48 8b 44 24 30 mov 0x30(%rsp),%rax + 40186b: 48 2b 44 24 40 sub 0x40(%rsp),%rax + 401870: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:189 + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_2 = gib_difftimespecs(&begin_timed_671, &end_timed_671); + + printf("itertime: %lf\n", itertime_2); + 401875: bf f7 36 40 00 mov $0x4036f7,%edi + 40187a: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40187f: f2 0f 5e 05 01 1f 00 divsd 0x1f01(%rip),%xmm0 # 403788 <__PRETTY_FUNCTION__.3+0x28> + 401886: 00 + 401887: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:187 + double itertime_2 = gib_difftimespecs(&begin_timed_671, &end_timed_671); + 40188b: f2 0f 11 44 24 28 movsd %xmm0,0x28(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:189 + printf("itertime: %lf\n", itertime_2); + 401891: e8 1a f8 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401896: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 40189a: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40189e: 48 8d 74 24 28 lea 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018a3: 4c 01 f7 add %r14,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:165 + iters_timed_671++) { + 4018a6: 49 83 c6 01 add $0x1,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4018aa: 48 0f af fa imul %rdx,%rdi + 4018ae: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018b2: e8 69 f8 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4018b7: 4c 3b 35 1a 38 00 00 cmp 0x381a(%rip),%r14 # 4050d8 + 4018be: 0f 8c 4c fe ff ff jl 401710 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018c4: 48 8b 55 10 mov 0x10(%rbp),%rdx + 4018c8: 48 8b 7d 00 mov 0x0(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 4018cc: b9 30 1d 40 00 mov $0x401d30,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4018d1: 48 8b 75 08 mov 0x8(%rbp),%rsi + 4018d5: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018d8: 48 0f af fa imul %rdx,%rdi + 4018dc: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 4018e0: e8 9b f7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + gib_vector_inplace_update(times_5, iters_timed_671, &itertime_2); + } + gib_vector_inplace_sort(times_5, gib_compare_doubles); + + double *tmp_6 = (double *) gib_vector_nth(times_5, gib_get_iters_param() / + 4018e5: 48 8b 05 ec 37 00 00 mov 0x37ec(%rip),%rax # 4050d8 + 4018ec: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018f2: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 4018f6: 48 8b 75 10 mov 0x10(%rbp),%rsi + 4018fa: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + 4018fe: 48 99 cqto +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401900: 4c 8b 25 79 1e 00 00 mov 0x1e79(%rip),%r12 # 403780 <__PRETTY_FUNCTION__.3+0x20> +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + 401907: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 40190a: 48 8b 55 08 mov 0x8(%rbp),%rdx + 40190e: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401911: 48 01 f8 add %rdi,%rax + 401914: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:196 + 2); + double selftimed_4 = *tmp_6; + 401918: 4c 8b 34 01 mov (%rcx,%rax,1),%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 40191c: 48 85 d2 test %rdx,%rdx + 40191f: 7e 2d jle 40194e + 401921: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401925: 4c 8b 25 54 1e 00 00 mov 0x1e54(%rip),%r12 # 403780 <__PRETTY_FUNCTION__.3+0x20> + 40192c: 48 8d 04 39 lea (%rcx,%rdi,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401930: 66 49 0f 6e d4 movq %r12,%xmm2 + 401935: f2 0f 58 10 addsd (%rax),%xmm2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401939: 83 44 24 04 01 addl $0x1,0x4(%rsp) + 40193e: 48 01 f0 add %rsi,%rax + 401941: 8b 5c 24 04 mov 0x4(%rsp),%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401945: 66 49 0f 7e d4 movq %xmm2,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 40194a: 39 d3 cmp %edx,%ebx + 40194c: 75 e2 jne 401930 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 40194e: bf 06 37 40 00 mov $0x403706,%edi + 401953: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401955: 31 db xor %ebx,%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 401957: e8 54 f7 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 40195c: 4c 8b 6d 08 mov 0x8(%rbp),%r13 + 401960: 4c 2b 6d 00 sub 0x0(%rbp),%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 401964: 4d 8d 7d ff lea -0x1(%r13),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401968: 4d 85 ed test %r13,%r13 + 40196b: 7e 39 jle 4019a6 + 40196d: 0f 1f 00 nopl (%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401970: 48 8b 45 00 mov 0x0(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401974: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401978: 48 01 d8 add %rbx,%rax + 40197b: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401980: f2 0f 10 04 02 movsd (%rdx,%rax,1),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 401985: 49 39 df cmp %rbx,%r15 + 401988: 0f 84 01 01 00 00 je 401a8f +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 40198e: bf 5b 37 40 00 mov $0x40375b,%edi + 401993: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401998: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 40199c: e8 0f f7 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4019a1: 49 39 dd cmp %rbx,%r13 + 4019a4: 75 ca jne 401970 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 4019a6: bf 14 37 40 00 mov $0x403714,%edi + 4019ab: e8 c0 f6 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4019b0: 48 8b 7d 18 mov 0x18(%rbp),%rdi + 4019b4: e8 77 f6 ff ff call 401030 + 4019b9: 48 89 ef mov %rbp,%rdi + 4019bc: e8 6f f6 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:201 + double batchtime_3 = gib_sum_timing_array(times_5); + + gib_print_timing_array(times_5); + gib_vector_free(times_5); + printf("ITERS: %ld\n", gib_get_iters_param()); + 4019c1: 48 8b 35 10 37 00 00 mov 0x3710(%rip),%rsi # 4050d8 + 4019c8: bf 16 37 40 00 mov $0x403716,%edi + 4019cd: 31 c0 xor %eax,%eax + 4019cf: e8 dc f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:202 + printf("SIZE: %ld\n", gib_get_size_param()); + 4019d4: 48 8b 35 05 37 00 00 mov 0x3705(%rip),%rsi # 4050e0 + 4019db: bf 22 37 40 00 mov $0x403722,%edi + 4019e0: 31 c0 xor %eax,%eax + 4019e2: e8 c9 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:203 + printf("BATCHTIME: %e\n", batchtime_3); + 4019e7: 66 49 0f 6e c4 movq %r12,%xmm0 + 4019ec: bf 2d 37 40 00 mov $0x40372d,%edi + 4019f1: b8 01 00 00 00 mov $0x1,%eax + 4019f6: e8 b5 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:204 + printf("SELFTIMED: %e\n", selftimed_4); + 4019fb: 66 49 0f 6e c6 movq %r14,%xmm0 + 401a00: bf 3c 37 40 00 mov $0x40373c,%edi + 401a05: b8 01 00 00 00 mov $0x1,%eax + 401a0a: e8 a1 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:205 + printf("'#("); + 401a0f: bf 4b 37 40 00 mov $0x40374b,%edi + 401a14: 31 c0 xor %eax,%eax + 401a16: e8 95 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:206 + printf(""); + 401a1b: bf 4f 37 40 00 mov $0x40374f,%edi + 401a20: 31 c0 xor %eax,%eax + 401a22: e8 89 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:207 + printf(" "); + 401a27: bf 20 00 00 00 mov $0x20,%edi + 401a2c: e8 0f f6 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:208 + printf(""); + 401a31: bf 4f 37 40 00 mov $0x40374f,%edi + 401a36: 31 c0 xor %eax,%eax + 401a38: e8 73 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:209 + printf(")"); + 401a3d: bf 29 00 00 00 mov $0x29,%edi + 401a42: e8 f9 f5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:210 + printf("\n"); + 401a47: bf 0a 00 00 00 mov $0xa,%edi + 401a4c: e8 ef f5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 + 401a51: 48 8b 3d e0 36 00 00 mov 0x36e0(%rip),%rdi # 405138 + 401a58: e8 d3 f5 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2042 + GibShadowstack *rstack = DEFAULT_READ_SHADOWSTACK; + GibShadowstack *wstack = DEFAULT_WRITE_SHADOWSTACK; + GibOldgen *oldgen = DEFAULT_GENERATION; + + // Free all objects initialized by the Rust RTS. + gib_gc_cleanup(rstack, wstack, nursery, oldgen); + 401a5d: 48 8b 0d b4 36 00 00 mov 0x36b4(%rip),%rcx # 405118 + 401a64: 48 8b 15 c5 36 00 00 mov 0x36c5(%rip),%rdx # 405130 + 401a6b: 48 8b 35 ae 36 00 00 mov 0x36ae(%rip),%rsi # 405120 + 401a72: 48 8b 3d af 36 00 00 mov 0x36af(%rip),%rdi # 405128 + 401a79: e8 42 f6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:215 + + int exit_9 = gib_exit(); + + return exit_9; + 401a7e: 48 83 c4 58 add $0x58,%rsp + 401a82: 31 c0 xor %eax,%eax + 401a84: 5b pop %rbx + 401a85: 5d pop %rbp + 401a86: 41 5c pop %r12 + 401a88: 41 5d pop %r13 + 401a8a: 41 5e pop %r14 + 401a8c: 41 5f pop %r15 + 401a8e: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401a8f: bf 58 37 40 00 mov $0x403758,%edi + 401a94: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401a99: 49 8d 5f 01 lea 0x1(%r15),%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401a9d: e8 0e f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401aa2: 4c 39 eb cmp %r13,%rbx + 401aa5: 0f 85 c5 fe ff ff jne 401970 + 401aab: e9 f6 fe ff ff jmp 4019a6 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401ab0: bf 01 00 00 00 mov $0x1,%edi + 401ab5: e8 76 f6 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1997 + gib_global_bench_prog_param = (char*) gib_alloc(1*sizeof(char)); + 401aba: 48 89 05 77 36 00 00 mov %rax,0x3677(%rip) # 405138 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + *gib_global_bench_prog_param = '\n'; + 401ac1: c6 00 0a movb $0xa,(%rax) + 401ac4: e9 40 fa ff ff jmp 401509 +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + 401ac9: 4c 89 e1 mov %r12,%rcx + 401acc: 4c 89 fa mov %r15,%rdx + 401acf: be 05 00 00 00 mov $0x5,%esi + 401ad4: 4c 89 ef mov %r13,%rdi + 401ad7: e8 44 04 00 00 call 401f20 + 401adc: e9 5f fd ff ff jmp 401840 + 401ae1: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401ae6: be 70 36 40 00 mov $0x403670,%esi + 401aeb: e8 20 06 00 00 call 402110 + 401af0: e8 4b 06 00 00 call 402140 + 401af5: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401afa: be 5b 36 40 00 mov $0x40365b,%esi + 401aff: e8 0c 06 00 00 call 402110 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 401b04: 48 8b 3d f5 35 00 00 mov 0x35f5(%rip),%rdi # 405100 + 401b0b: ba 08 00 00 00 mov $0x8,%edx + 401b10: be 18 33 40 00 mov $0x403318,%esi + 401b15: e8 f6 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 401b1a: bf 01 00 00 00 mov $0x1,%edi + 401b1f: e8 4c f6 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 401b24: ba 20 00 00 00 mov $0x20,%edx + 401b29: be 18 33 40 00 mov $0x403318,%esi + 401b2e: 48 8b 3d cb 35 00 00 mov 0x35cb(%rip),%rdi # 405100 + 401b35: 31 c0 xor %eax,%eax + 401b37: e8 d4 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 401b3c: bf 01 00 00 00 mov $0x1,%edi + 401b41: e8 2a f6 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1423 + fprintf(stderr, "gib_nursery_initialize: gib_alloc failed: %zu", + 401b46: 48 8b 3d b3 35 00 00 mov 0x35b3(%rip),%rdi # 405100 + 401b4d: ba 00 00 40 00 mov $0x400000,%edx + 401b52: be a8 35 40 00 mov $0x4035a8,%esi + 401b57: e8 b4 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1425 + exit(1); + 401b5c: bf 01 00 00 00 mov $0x1,%edi + 401b61: e8 0a f6 ff ff call 401170 + 401b66: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401b6b: be c0 36 40 00 mov $0x4036c0,%esi + 401b70: e8 9b 05 00 00 call 402110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 401b75: ba 18 00 00 00 mov $0x18,%edx + 401b7a: be d8 35 40 00 mov $0x4035d8,%esi + 401b7f: eb ad jmp 401b2e +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:73 + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + 401b81: 89 c2 mov %eax,%edx + 401b83: be 08 36 40 00 mov $0x403608,%esi + 401b88: 48 8b 3d 71 35 00 00 mov 0x3571(%rip),%rdi # 405100 + 401b8f: 31 c0 xor %eax,%eax + 401b91: e8 7a f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:74 + exit(1); + 401b96: bf 01 00 00 00 mov $0x1,%edi + 401b9b: e8 d0 f5 ff ff call 401170 + 401ba0: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401ba5: be 9e 36 40 00 mov $0x40369e,%esi + 401baa: e8 61 05 00 00 call 402110 + 401baf: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401bb4: be ca 36 40 00 mov $0x4036ca,%esi + 401bb9: e8 52 05 00 00 call 402110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1987 + fprintf(stderr, "Extra arguments left over: "); + 401bbe: 48 8b 0d 3b 35 00 00 mov 0x353b(%rip),%rcx # 405100 + 401bc5: ba 1b 00 00 00 mov $0x1b,%edx + 401bca: be 01 00 00 00 mov $0x1,%esi + 401bcf: 4d 63 ff movslq %r15d,%r15 + 401bd2: bf d7 36 40 00 mov $0x4036d7,%edi + 401bd7: e8 a4 f5 ff ff call 401180 + 401bdc: eb 20 jmp 401bfe +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1988 + for(; i < argc; i++) fprintf(stderr, "%s ", argv[i]); + 401bde: 48 8b 44 24 08 mov 0x8(%rsp),%rax + 401be3: 48 8b 3d 16 35 00 00 mov 0x3516(%rip),%rdi # 405100 + 401bea: be f3 36 40 00 mov $0x4036f3,%esi + 401bef: 4a 8b 14 f8 mov (%rax,%r15,8),%rdx + 401bf3: 31 c0 xor %eax,%eax + 401bf5: 49 83 c7 01 add $0x1,%r15 + 401bf9: e8 12 f5 ff ff call 401110 + 401bfe: 44 39 fb cmp %r15d,%ebx + 401c01: 7f db jg 401bde +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1989 + gib_show_usage(argv); + 401c03: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401c08: e8 43 01 00 00 call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1990 + exit(1); + 401c0d: bf 01 00 00 00 mov $0x1,%edi + 401c12: e8 59 f5 ff ff call 401170 + 401c17: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401c1c: be b3 36 40 00 mov $0x4036b3,%esi + 401c21: e8 ea 04 00 00 call 402110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1910 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + 401c26: 89 c2 mov %eax,%edx + 401c28: be f0 34 40 00 mov $0x4034f0,%esi + 401c2d: e9 56 ff ff ff jmp 401b88 +main(): + 401c32: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c39: 00 00 00 + 401c3c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401c40 <_start>: +_start(): + 401c40: f3 0f 1e fa endbr64 + 401c44: 31 ed xor %ebp,%ebp + 401c46: 49 89 d1 mov %rdx,%r9 + 401c49: 5e pop %rsi + 401c4a: 48 89 e2 mov %rsp,%rdx + 401c4d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 401c51: 50 push %rax + 401c52: 54 push %rsp + 401c53: 45 31 c0 xor %r8d,%r8d + 401c56: 31 c9 xor %ecx,%ecx + 401c58: 48 c7 c7 a0 11 40 00 mov $0x4011a0,%rdi + 401c5f: ff 15 73 33 00 00 call *0x3373(%rip) # 404fd8 <__libc_start_main@GLIBC_2.34> + 401c65: f4 hlt + 401c66: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c6d: 00 00 00 + +0000000000401c70 <_dl_relocate_static_pie>: +_dl_relocate_static_pie(): + 401c70: f3 0f 1e fa endbr64 + 401c74: c3 ret + 401c75: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c7c: 00 00 00 + 401c7f: 90 nop + +0000000000401c80 : +deregister_tm_clones(): + 401c80: b8 e8 50 40 00 mov $0x4050e8,%eax + 401c85: 48 3d e8 50 40 00 cmp $0x4050e8,%rax + 401c8b: 74 13 je 401ca0 + 401c8d: b8 00 00 00 00 mov $0x0,%eax + 401c92: 48 85 c0 test %rax,%rax + 401c95: 74 09 je 401ca0 + 401c97: bf e8 50 40 00 mov $0x4050e8,%edi + 401c9c: ff e0 jmp *%rax + 401c9e: 66 90 xchg %ax,%ax + 401ca0: c3 ret + 401ca1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401ca8: 00 00 00 00 + 401cac: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401cb0 : +register_tm_clones(): + 401cb0: be e8 50 40 00 mov $0x4050e8,%esi + 401cb5: 48 81 ee e8 50 40 00 sub $0x4050e8,%rsi + 401cbc: 48 89 f0 mov %rsi,%rax + 401cbf: 48 c1 ee 3f shr $0x3f,%rsi + 401cc3: 48 c1 f8 03 sar $0x3,%rax + 401cc7: 48 01 c6 add %rax,%rsi + 401cca: 48 d1 fe sar $1,%rsi + 401ccd: 74 11 je 401ce0 + 401ccf: b8 00 00 00 00 mov $0x0,%eax + 401cd4: 48 85 c0 test %rax,%rax + 401cd7: 74 07 je 401ce0 + 401cd9: bf e8 50 40 00 mov $0x4050e8,%edi + 401cde: ff e0 jmp *%rax + 401ce0: c3 ret + 401ce1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401ce8: 00 00 00 00 + 401cec: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401cf0 <__do_global_dtors_aux>: +__do_global_dtors_aux(): + 401cf0: 80 3d 11 34 00 00 00 cmpb $0x0,0x3411(%rip) # 405108 + 401cf7: 75 17 jne 401d10 <__do_global_dtors_aux+0x20> + 401cf9: 55 push %rbp + 401cfa: 48 89 e5 mov %rsp,%rbp + 401cfd: e8 7e ff ff ff call 401c80 + 401d02: c6 05 ff 33 00 00 01 movb $0x1,0x33ff(%rip) # 405108 + 401d09: 5d pop %rbp + 401d0a: c3 ret + 401d0b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + 401d10: c3 ret + 401d11: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401d18: 00 00 00 00 + 401d1c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401d20 : +frame_dummy(): + 401d20: eb 8e jmp 401cb0 + 401d22: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401d29: 00 00 00 + 401d2c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401d30 : +gib_compare_doubles(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1835 + return (*da > *db) - (*da < *db); + 401d30: f2 0f 10 07 movsd (%rdi),%xmm0 + 401d34: f2 0f 10 0e movsd (%rsi),%xmm1 + 401d38: 31 c0 xor %eax,%eax + 401d3a: 66 0f 2f c1 comisd %xmm1,%xmm0 + 401d3e: 0f 97 c0 seta %al + 401d41: 31 d2 xor %edx,%edx + 401d43: 66 0f 2f c8 comisd %xmm0,%xmm1 + 401d47: 0f 97 c2 seta %dl + 401d4a: 29 d0 sub %edx,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1836 +} + 401d4c: c3 ret + 401d4d: 0f 1f 00 nopl (%rax) + +0000000000401d50 : +gib_show_usage(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1797 +{ + 401d50: 53 push %rbx + 401d51: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1798 + printf("\n"); + 401d54: bf 0a 00 00 00 mov $0xa,%edi + 401d59: e8 e2 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1799 + printf("This binary was generated by the Gibbon compiler.\n"); + 401d5e: bf 08 30 40 00 mov $0x403008,%edi + 401d63: e8 08 f3 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1800 + printf("\n"); + 401d68: bf 0a 00 00 00 mov $0xa,%edi + 401d6d: e8 ce f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1801 + printf("Usage: %s [OPTIONS...]\n", argv[0]); + 401d72: 48 8b 33 mov (%rbx),%rsi + 401d75: bf 33 36 40 00 mov $0x403633,%edi + 401d7a: 31 c0 xor %eax,%eax + 401d7c: e8 2f f3 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1803 + printf("\n"); + 401d81: bf 0a 00 00 00 mov $0xa,%edi + 401d86: e8 b5 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1804 + printf("Options:\n"); + 401d8b: bf 4b 36 40 00 mov $0x40364b,%edi + 401d90: e8 db f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1805 + printf(" --biginf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_biginf_init_chunk_size); + 401d95: 48 8b 35 34 33 00 00 mov 0x3334(%rip),%rsi # 4050d0 + 401d9c: bf 40 30 40 00 mov $0x403040,%edi + 401da1: 31 c0 xor %eax,%eax + 401da3: e8 08 f3 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1806 + printf(" --inf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_inf_init_chunk_size); + 401da8: 48 8b 35 19 33 00 00 mov 0x3319(%rip),%rsi # 4050c8 + 401daf: bf 88 30 40 00 mov $0x403088,%edi + 401db4: 31 c0 xor %eax,%eax + 401db6: e8 f5 f2 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1807 + printf(" --bench-input Set the input file read for benchmarking. Applies only\n"); + 401dbb: bf d0 30 40 00 mov $0x4030d0,%edi + 401dc0: e8 ab f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1808 + printf(" If the program was *compiled* with --bench-fun. \n"); + 401dc5: bf 28 31 40 00 mov $0x403128,%edi + 401dca: e8 a1 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1809 + printf("\n"); + 401dcf: bf 0a 00 00 00 mov $0xa,%edi + 401dd4: e8 67 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1810 + printf(" --array-input Set the file from which to read the array input.\n"); + 401dd9: bf 80 31 40 00 mov $0x403180,%edi + 401dde: e8 8d f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1811 + printf(" --array-input-length Set the size of the array input file.\n"); + 401de3: bf d8 31 40 00 mov $0x4031d8,%edi + 401de8: e8 83 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1812 + printf(" --iterate Set the number of timing iterations to perform (default 1).\n"); + 401ded: bf 20 32 40 00 mov $0x403220,%edi + 401df2: e8 79 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 401df7: bf 80 32 40 00 mov $0x403280,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1816 +} + 401dfc: 5b pop %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 401dfd: e9 6e f2 ff ff jmp 401070 + 401e02: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401e09: 00 00 00 00 + 401e0d: 0f 1f 00 nopl (%rax) + +0000000000401e10 : +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:99 +GibVector *generate_loop_398_533(GibVector *vec_166_578_634, + 401e10: 41 56 push %r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e12: 48 89 c8 mov %rcx,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:99 +GibVector *generate_loop_398_533(GibVector *vec_166_578_634, + 401e15: 49 89 ce mov %rcx,%r14 + 401e18: 41 55 push %r13 + 401e1a: 49 89 d5 mov %rdx,%r13 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e1d: 48 29 f0 sub %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:99 +GibVector *generate_loop_398_533(GibVector *vec_166_578_634, + 401e20: 41 54 push %r12 + 401e22: 49 89 fc mov %rdi,%r12 + 401e25: 53 push %rbx + 401e26: 48 89 f3 mov %rsi,%rbx + 401e29: 48 83 ec 28 sub $0x28,%rsp +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e2d: 48 8b 57 10 mov 0x10(%rdi),%rdx + 401e31: 48 8b 3f mov (%rdi),%rdi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e34: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401e38: 48 01 f7 add %rsi,%rdi +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e3b: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e3e: 48 0f af fa imul %rdx,%rdi + 401e42: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e47: e8 d4 f2 ff ff call 401120 +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401e4c: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401e50: 4c 39 ef cmp %r13,%rdi + 401e53: 75 13 jne 401e68 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:118 +} + 401e55: 48 83 c4 28 add $0x28,%rsp + 401e59: 4c 89 e0 mov %r12,%rax + 401e5c: 5b pop %rbx + 401e5d: 41 5c pop %r12 + 401e5f: 41 5d pop %r13 + 401e61: 41 5e pop %r14 + 401e63: c3 ret + 401e64: 0f 1f 40 00 nopl 0x0(%rax) +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e68: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e6d: 4c 89 f0 mov %r14,%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e70: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e75: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e78: 49 03 3c 24 add (%r12),%rdi + 401e7c: 48 0f af fa imul %rdx,%rdi + 401e80: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e85: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e8a: e8 91 f2 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401e8f: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401e93: 49 39 fd cmp %rdi,%r13 + 401e96: 74 bd je 401e55 +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e98: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e9d: 4c 89 f0 mov %r14,%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ea0: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401ea5: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ea8: 49 03 3c 24 add (%r12),%rdi + 401eac: 48 0f af fa imul %rdx,%rdi + 401eb0: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401eb5: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401eba: e8 61 f2 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401ebf: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401ec3: 49 39 fd cmp %rdi,%r13 + 401ec6: 74 8d je 401e55 +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ec8: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401ecd: 4c 89 f0 mov %r14,%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ed0: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401ed5: 48 29 f8 sub %rdi,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ed8: 49 03 3c 24 add (%r12),%rdi + 401edc: 48 0f af fa imul %rdx,%rdi + 401ee0: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401ee5: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401eea: e8 31 f2 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401eef: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401ef3: 49 39 f5 cmp %rsi,%r13 + 401ef6: 0f 84 59 ff ff ff je 401e55 + 401efc: 4c 89 e7 mov %r12,%rdi + 401eff: 4c 89 f1 mov %r14,%rcx + 401f02: 4c 89 ea mov %r13,%rdx + 401f05: e8 06 ff ff ff call 401e10 + 401f0a: 49 89 c4 mov %rax,%r12 + 401f0d: e9 43 ff ff ff jmp 401e55 +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + 401f12: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401f19: 00 00 00 00 + 401f1d: 0f 1f 00 nopl (%rax) + +0000000000401f20 : +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:119 +GibVector *generate_loop_398_536(GibVector *vec_166_591_649, + 401f20: 41 55 push %r13 + 401f22: 49 89 d5 mov %rdx,%r13 + 401f25: 41 54 push %r12 + 401f27: 49 89 cc mov %rcx,%r12 + 401f2a: 55 push %rbp + 401f2b: 48 89 fd mov %rdi,%rbp + 401f2e: 53 push %rbx + 401f2f: 48 89 f3 mov %rsi,%rbx + 401f32: 48 83 ec 28 sub $0x28,%rsp +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f36: 48 8b 01 mov (%rcx),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401f39: 48 8b 51 18 mov 0x18(%rcx),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f3d: 48 01 f0 add %rsi,%rax + 401f40: 48 0f af 41 10 imul 0x10(%rcx),%rax +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401f45: 48 8b 04 02 mov (%rdx,%rax,1),%rax +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f49: 48 8b 57 10 mov 0x10(%rdi),%rdx + 401f4d: 48 8b 3f mov (%rdi),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401f50: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f54: 48 01 f7 add %rsi,%rdi +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f57: 48 89 e6 mov %rsp,%rsi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401f5a: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f5e: 48 0f af fa imul %rdx,%rdi + 401f62: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f66: e8 b5 f1 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:137 + GibInt fltAppE_619_659 = idx_167_592_650 + 1; + 401f6b: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401f6f: 4c 39 ef cmp %r13,%rdi + 401f72: 75 0c jne 401f80 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:143 +} + 401f74: 48 83 c4 28 add $0x28,%rsp + 401f78: 5b pop %rbx + 401f79: 5d pop %rbp + 401f7a: 41 5c pop %r12 + 401f7c: 41 5d pop %r13 + 401f7e: c3 ret + 401f7f: 90 nop +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f80: 49 8b 04 24 mov (%r12),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401f84: 49 8b 54 24 18 mov 0x18(%r12),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f89: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f8e: 48 01 f8 add %rdi,%rax + 401f91: 49 0f af 44 24 10 imul 0x10(%r12),%rax + 401f97: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401f9b: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f9f: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401fa3: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401fa7: 48 0f af fa imul %rdx,%rdi + 401fab: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401faf: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401fb4: e8 67 f1 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:137 + GibInt fltAppE_619_659 = idx_167_592_650 + 1; + 401fb9: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401fbd: 49 39 fd cmp %rdi,%r13 + 401fc0: 74 b2 je 401f74 +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401fc2: 49 8b 04 24 mov (%r12),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401fc6: 49 8b 54 24 18 mov 0x18(%r12),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401fcb: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401fd0: 48 01 f8 add %rdi,%rax + 401fd3: 49 0f af 44 24 10 imul 0x10(%r12),%rax + 401fd9: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401fdd: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401fe1: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401fe5: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401fe9: 48 0f af fa imul %rdx,%rdi + 401fed: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401ff1: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ff6: e8 25 f1 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:137 + GibInt fltAppE_619_659 = idx_167_592_650 + 1; + 401ffb: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401fff: 49 39 fd cmp %rdi,%r13 + 402002: 0f 84 6c ff ff ff je 401f74 +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402008: 49 8b 04 24 mov (%r12),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 40200c: 49 8b 54 24 18 mov 0x18(%r12),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 402011: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402016: 48 01 f8 add %rdi,%rax + 402019: 49 0f af 44 24 10 imul 0x10(%r12),%rax + 40201f: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 402023: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402027: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 40202b: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40202f: 48 0f af fa imul %rdx,%rdi + 402033: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 402037: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40203c: e8 df f0 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:137 + GibInt fltAppE_619_659 = idx_167_592_650 + 1; + 402041: 48 8d 73 04 lea 0x4(%rbx),%rsi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 402045: 49 39 f5 cmp %rsi,%r13 + 402048: 0f 84 26 ff ff ff je 401f74 + 40204e: 4c 89 e1 mov %r12,%rcx + 402051: 4c 89 ea mov %r13,%rdx + 402054: 48 89 ef mov %rbp,%rdi + 402057: e8 c4 fe ff ff call 401f20 + 40205c: e9 13 ff ff ff jmp 401f74 +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + 402061: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 402068: 00 00 00 00 + 40206c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402070 : +gib_vector_alloc.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 402070: 41 54 push %r12 + 402072: 53 push %rbx + 402073: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402076: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 40207b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40207f: e8 ac f0 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 402084: 48 85 c0 test %rax,%rax + 402087: 74 3b je 4020c4 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 402089: 48 8d 3c dd 00 00 00 lea 0x0(,%rbx,8),%rdi + 402090: 00 + 402091: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402094: e8 97 f0 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 402099: 48 85 c0 test %rax,%rax + 40209c: 74 48 je 4020e6 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 40209e: 49 89 44 24 18 mov %rax,0x18(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 4020a3: 4c 89 e0 mov %r12,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 4020a6: 49 c7 04 24 00 00 00 movq $0x0,(%r12) + 4020ad: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 4020ae: 49 89 5c 24 08 mov %rbx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 4020b3: 49 c7 44 24 10 08 00 movq $0x8,0x10(%r12) + 4020ba: 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 4020bc: 48 83 c4 08 add $0x8,%rsp + 4020c0: 5b pop %rbx + 4020c1: 41 5c pop %r12 + 4020c3: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 4020c4: 48 8b 3d 35 30 00 00 mov 0x3035(%rip),%rdi # 405100 + 4020cb: ba 20 00 00 00 mov $0x20,%edx + 4020d0: be 18 33 40 00 mov $0x403318,%esi + 4020d5: 31 c0 xor %eax,%eax + 4020d7: e8 34 f0 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 4020dc: bf 01 00 00 00 mov $0x1,%edi + 4020e1: e8 8a f0 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 4020e6: 48 8b 3d 13 30 00 00 mov 0x3013(%rip),%rdi # 405100 + 4020ed: ba 08 00 00 00 mov $0x8,%edx + 4020f2: be 18 33 40 00 mov $0x403318,%esi + 4020f7: e8 14 f0 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 4020fc: bf 01 00 00 00 mov $0x1,%edi + 402101: e8 6a f0 ff ff call 401170 + 402106: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40210d: 00 00 00 + +0000000000402110 : +check_args.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 402110: 55 push %rbp + 402111: 48 89 fd mov %rdi,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 402114: 48 8b 3d e5 2f 00 00 mov 0x2fe5(%rip),%rdi # 405100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 40211b: 48 89 f2 mov %rsi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 40211e: 31 c0 xor %eax,%eax + 402120: be 40 33 40 00 mov $0x403340,%esi + 402125: e8 e6 ef ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1879 + gib_show_usage(argv); + 40212a: 48 89 ef mov %rbp,%rdi + 40212d: e8 1e fc ff ff call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1880 + exit(1); + 402132: bf 01 00 00 00 mov $0x1,%edi + 402137: e8 34 f0 ff ff call 401170 + 40213c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402140 : +gib_shadowstack_initialize.part.0.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1483 +static void gib_shadowstack_initialize(GibShadowstack* stack, size_t stack_size) + 402140: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1487 + fprintf(stderr, "gib_shadowstack_initialize: gib_alloc failed: %zu", + 402144: ba 00 00 00 06 mov $0x6000000,%edx + 402149: be 70 33 40 00 mov $0x403370,%esi + 40214e: 31 c0 xor %eax,%eax + 402150: 48 8b 3d a9 2f 00 00 mov 0x2fa9(%rip),%rdi # 405100 + 402157: e8 b4 ef ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1489 + exit(1); + 40215c: bf 01 00 00 00 mov $0x1,%edi + 402161: e8 0a f0 ff ff call 401170 + 402166: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40216d: 00 00 00 + +0000000000402170 : +gib_check_rust_struct_sizes(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:994 +{ + 402170: 55 push %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402171: bf 38 00 00 00 mov $0x38,%edi + 402176: e8 b5 ef ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 40217b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40217f: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:999 + nursery = (size_t *) ((char *) frame + sizeof(size_t)); + 402182: 48 8d 50 10 lea 0x10(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1000 + generation = (size_t *) ((char *) nursery + sizeof(size_t)); + 402186: 48 8d 48 18 lea 0x18(%rax),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:998 + frame = (size_t *) ((char *) stack + sizeof(size_t)); + 40218a: 48 8d 70 08 lea 0x8(%rax),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1003 + gc_stats = (size_t *) ((char *) footer + sizeof(size_t)); + 40218e: 48 83 c0 30 add $0x30,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402192: 4c 8d 4d 28 lea 0x28(%rbp),%r9 + 402196: 48 89 ef mov %rbp,%rdi + 402199: 50 push %rax + 40219a: 4c 8d 45 20 lea 0x20(%rbp),%r8 + 40219e: e8 ad ef ff ff call 401150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 + assert(*stack == sizeof(GibShadowstack)); + 4021a3: 48 83 7d 00 18 cmpq $0x18,0x0(%rbp) + 4021a8: 58 pop %rax + 4021a9: 5a pop %rdx + 4021aa: 75 42 jne 4021ee +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 + assert(*frame == sizeof(GibShadowstackFrame)); + 4021ac: 48 83 7d 08 18 cmpq $0x18,0x8(%rbp) + 4021b1: 0f 85 cd 00 00 00 jne 402284 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 + assert(*nursery == sizeof(GibNursery)); + 4021b7: 48 83 7d 10 20 cmpq $0x20,0x10(%rbp) + 4021bc: 0f 85 a9 00 00 00 jne 40226b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 + assert(*generation == sizeof(GibOldgen)); + 4021c2: 48 83 7d 18 18 cmpq $0x18,0x18(%rbp) + 4021c7: 0f 85 85 00 00 00 jne 402252 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 + assert(*reg_info == sizeof(GibRegionInfo)); + 4021cd: 48 83 7d 20 20 cmpq $0x20,0x20(%rbp) + 4021d2: 75 65 jne 402239 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 + assert(*footer == sizeof(GibOldgenChunkFooter)); + 4021d4: 48 83 7d 28 18 cmpq $0x18,0x28(%rbp) + 4021d9: 75 45 jne 402220 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 + assert(*gc_stats == sizeof(GibGcStats)); + 4021db: 48 81 7d 30 f0 00 00 cmpq $0xf0,0x30(%rbp) + 4021e2: 00 + 4021e3: 75 22 jne 402207 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4021e5: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1019 +} + 4021e8: 5d pop %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4021e9: e9 42 ee ff ff jmp 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 (discriminator 1) + assert(*stack == sizeof(GibShadowstack)); + 4021ee: b9 60 37 40 00 mov $0x403760,%ecx + 4021f3: ba ef 03 00 00 mov $0x3ef,%edx + 4021f8: be a8 33 40 00 mov $0x4033a8,%esi + 4021fd: bf e8 33 40 00 mov $0x4033e8,%edi + 402202: e8 c9 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 (discriminator 1) + assert(*gc_stats == sizeof(GibGcStats)); + 402207: b9 60 37 40 00 mov $0x403760,%ecx + 40220c: ba f5 03 00 00 mov $0x3f5,%edx + 402211: be a8 33 40 00 mov $0x4033a8,%esi + 402216: bf d0 34 40 00 mov $0x4034d0,%edi + 40221b: e8 b0 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 (discriminator 1) + assert(*footer == sizeof(GibOldgenChunkFooter)); + 402220: b9 60 37 40 00 mov $0x403760,%ecx + 402225: ba f4 03 00 00 mov $0x3f4,%edx + 40222a: be a8 33 40 00 mov $0x4033a8,%esi + 40222f: bf a8 34 40 00 mov $0x4034a8,%edi + 402234: e8 97 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 (discriminator 1) + assert(*reg_info == sizeof(GibRegionInfo)); + 402239: b9 60 37 40 00 mov $0x403760,%ecx + 40223e: ba f3 03 00 00 mov $0x3f3,%edx + 402243: be a8 33 40 00 mov $0x4033a8,%esi + 402248: bf 80 34 40 00 mov $0x403480,%edi + 40224d: e8 7e ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 (discriminator 1) + assert(*generation == sizeof(GibOldgen)); + 402252: b9 60 37 40 00 mov $0x403760,%ecx + 402257: ba f2 03 00 00 mov $0x3f2,%edx + 40225c: be a8 33 40 00 mov $0x4033a8,%esi + 402261: bf 58 34 40 00 mov $0x403458,%edi + 402266: e8 65 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 (discriminator 1) + assert(*nursery == sizeof(GibNursery)); + 40226b: b9 60 37 40 00 mov $0x403760,%ecx + 402270: ba f1 03 00 00 mov $0x3f1,%edx + 402275: be a8 33 40 00 mov $0x4033a8,%esi + 40227a: bf 38 34 40 00 mov $0x403438,%edi + 40227f: e8 4c ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 (discriminator 1) + assert(*frame == sizeof(GibShadowstackFrame)); + 402284: b9 60 37 40 00 mov $0x403760,%ecx + 402289: ba f0 03 00 00 mov $0x3f0,%edx + 40228e: be a8 33 40 00 mov $0x4033a8,%esi + 402293: bf 10 34 40 00 mov $0x403410,%edi + 402298: e8 33 ee ff ff call 4010d0 <__assert_fail@plt> + +Disassembly of section .fini: + +00000000004022a0 <_fini>: +_fini(): + 4022a0: f3 0f 1e fa endbr64 + 4022a4: 48 83 ec 08 sub $0x8,%rsp + 4022a8: 48 83 c4 08 add $0x8,%rsp + 4022ac: c3 ret diff --git a/microbench/tail_recursion/MapOnVectorTail.exe b/microbench/tail_recursion/MapOnVectorTail.exe new file mode 100755 index 000000000..5bc3616d0 Binary files /dev/null and b/microbench/tail_recursion/MapOnVectorTail.exe differ diff --git a/microbench/tail_recursion/MapOnVectorTail.out b/microbench/tail_recursion/MapOnVectorTail.out new file mode 100644 index 000000000..3ce7100fa --- /dev/null +++ b/microbench/tail_recursion/MapOnVectorTail.out @@ -0,0 +1,15 @@ +itertime: 0.404492 +itertime: 0.404832 +itertime: 0.397768 +itertime: 0.395025 +itertime: 0.393012 +itertime: 0.393201 +itertime: 0.392537 +itertime: 0.389339 +itertime: 0.388205 +ITER TIMES: [0.388205, 0.389339, 0.392537, 0.393012, 0.393201, 0.395025, 0.397768, 0.404492, 0.404832] +ITERS: 9 +SIZE: 100000000 +BATCHTIME: 3.558411e+00 +SELFTIMED: 3.932011e-01 +'#( ) diff --git a/microbench/tail_recursion/MapOnVectorTail.s b/microbench/tail_recursion/MapOnVectorTail.s new file mode 100644 index 000000000..3bf25e180 --- /dev/null +++ b/microbench/tail_recursion/MapOnVectorTail.s @@ -0,0 +1,2191 @@ + +MapOnVectorTail.exe: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: +_init(): + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 3f 00 00 mov 0x3fd1(%rip),%rax # 404fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 : + 401020: ff 35 ca 3f 00 00 push 0x3fca(%rip) # 404ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 3f 00 00 jmp *0x3fcc(%rip) # 404ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401030 : + 401030: ff 25 ca 3f 00 00 jmp *0x3fca(%rip) # 405000 + 401036: 68 00 00 00 00 push $0x0 + 40103b: e9 e0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401040 : + 401040: ff 25 c2 3f 00 00 jmp *0x3fc2(%rip) # 405008 + 401046: 68 01 00 00 00 push $0x1 + 40104b: e9 d0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401050 : + 401050: ff 25 ba 3f 00 00 jmp *0x3fba(%rip) # 405010 + 401056: 68 02 00 00 00 push $0x2 + 40105b: e9 c0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401060 : + 401060: ff 25 b2 3f 00 00 jmp *0x3fb2(%rip) # 405018 + 401066: 68 03 00 00 00 push $0x3 + 40106b: e9 b0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401070 : + 401070: ff 25 aa 3f 00 00 jmp *0x3faa(%rip) # 405020 + 401076: 68 04 00 00 00 push $0x4 + 40107b: e9 a0 ff ff ff jmp 401020 <_init+0x20> + +0000000000401080 : + 401080: ff 25 a2 3f 00 00 jmp *0x3fa2(%rip) # 405028 + 401086: 68 05 00 00 00 push $0x5 + 40108b: e9 90 ff ff ff jmp 401020 <_init+0x20> + +0000000000401090 : + 401090: ff 25 9a 3f 00 00 jmp *0x3f9a(%rip) # 405030 + 401096: 68 06 00 00 00 push $0x6 + 40109b: e9 80 ff ff ff jmp 401020 <_init+0x20> + +00000000004010a0 : + 4010a0: ff 25 92 3f 00 00 jmp *0x3f92(%rip) # 405038 + 4010a6: 68 07 00 00 00 push $0x7 + 4010ab: e9 70 ff ff ff jmp 401020 <_init+0x20> + +00000000004010b0 : + 4010b0: ff 25 8a 3f 00 00 jmp *0x3f8a(%rip) # 405040 + 4010b6: 68 08 00 00 00 push $0x8 + 4010bb: e9 60 ff ff ff jmp 401020 <_init+0x20> + +00000000004010c0 : + 4010c0: ff 25 82 3f 00 00 jmp *0x3f82(%rip) # 405048 + 4010c6: 68 09 00 00 00 push $0x9 + 4010cb: e9 50 ff ff ff jmp 401020 <_init+0x20> + +00000000004010d0 <__assert_fail@plt>: + 4010d0: ff 25 7a 3f 00 00 jmp *0x3f7a(%rip) # 405050 <__assert_fail@GLIBC_2.2.5> + 4010d6: 68 0a 00 00 00 push $0xa + 4010db: e9 40 ff ff ff jmp 401020 <_init+0x20> + +00000000004010e0 : + 4010e0: ff 25 72 3f 00 00 jmp *0x3f72(%rip) # 405058 + 4010e6: 68 0b 00 00 00 push $0xb + 4010eb: e9 30 ff ff ff jmp 401020 <_init+0x20> + +00000000004010f0 : + 4010f0: ff 25 6a 3f 00 00 jmp *0x3f6a(%rip) # 405060 + 4010f6: 68 0c 00 00 00 push $0xc + 4010fb: e9 20 ff ff ff jmp 401020 <_init+0x20> + +0000000000401100 : + 401100: ff 25 62 3f 00 00 jmp *0x3f62(%rip) # 405068 + 401106: 68 0d 00 00 00 push $0xd + 40110b: e9 10 ff ff ff jmp 401020 <_init+0x20> + +0000000000401110 : + 401110: ff 25 5a 3f 00 00 jmp *0x3f5a(%rip) # 405070 + 401116: 68 0e 00 00 00 push $0xe + 40111b: e9 00 ff ff ff jmp 401020 <_init+0x20> + +0000000000401120 : + 401120: ff 25 52 3f 00 00 jmp *0x3f52(%rip) # 405078 + 401126: 68 0f 00 00 00 push $0xf + 40112b: e9 f0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401130 : + 401130: ff 25 4a 3f 00 00 jmp *0x3f4a(%rip) # 405080 + 401136: 68 10 00 00 00 push $0x10 + 40113b: e9 e0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401140 : + 401140: ff 25 42 3f 00 00 jmp *0x3f42(%rip) # 405088 + 401146: 68 11 00 00 00 push $0x11 + 40114b: e9 d0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401150 : + 401150: ff 25 3a 3f 00 00 jmp *0x3f3a(%rip) # 405090 + 401156: 68 12 00 00 00 push $0x12 + 40115b: e9 c0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401160 : + 401160: ff 25 32 3f 00 00 jmp *0x3f32(%rip) # 405098 + 401166: 68 13 00 00 00 push $0x13 + 40116b: e9 b0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401170 : + 401170: ff 25 2a 3f 00 00 jmp *0x3f2a(%rip) # 4050a0 + 401176: 68 14 00 00 00 push $0x14 + 40117b: e9 a0 fe ff ff jmp 401020 <_init+0x20> + +0000000000401180 : + 401180: ff 25 22 3f 00 00 jmp *0x3f22(%rip) # 4050a8 + 401186: 68 15 00 00 00 push $0x15 + 40118b: e9 90 fe ff ff jmp 401020 <_init+0x20> + +0000000000401190 : + 401190: ff 25 1a 3f 00 00 jmp *0x3f1a(%rip) # 4050b0 + 401196: 68 16 00 00 00 push $0x16 + 40119b: e9 80 fe ff ff jmp 401020 <_init+0x20> + +Disassembly of section .text: + +00000000004011a0
: +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:145 + + return tailapp_669; + } +} +int main(int argc, char **argv) +{ + 4011a0: 41 57 push %r15 + 4011a2: 41 56 push %r14 + 4011a4: 41 55 push %r13 + 4011a6: 41 54 push %r12 + 4011a8: 55 push %rbp + 4011a9: 53 push %rbx + 4011aa: 89 fb mov %edi,%ebx + 4011ac: 48 83 ec 58 sub $0x58,%rsp + 4011b0: 48 89 74 24 08 mov %rsi,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1900 + // Print the GC configuration. + gib_print_gc_config(); +#endif + + // Ensure that C and Rust agree on sizes of structs that cross the boundary. + gib_check_rust_struct_sizes(); + 4011b5: e8 86 0f 00 00 call 402140 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1909 + // num iterations: How many times to repeat a benchmark. + // tree size: An integer passes to `build_tree()`. + + struct rlimit lim; + int code; + if ( (code = getrlimit(RLIMIT_STACK, &lim)) ) { + 4011ba: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 4011bf: bf 03 00 00 00 mov $0x3,%edi + 4011c4: e8 c7 ff ff ff call 401190 + 4011c9: 89 44 24 04 mov %eax,0x4(%rsp) + 4011cd: 85 c0 test %eax,%eax + 4011cf: 0f 85 51 0a 00 00 jne 401c26 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1914 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + exit(1); + } + + lim.rlim_cur = 4 * 1024LU * 1024LU * 1024LU; // 1GB stack. + 4011d5: 48 b8 00 00 00 00 01 movabs $0x100000000,%rax + 4011dc: 00 00 00 + 4011df: 48 89 44 24 40 mov %rax,0x40(%rsp) + 4011e4: eb 3b jmp 401221 + 4011e6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4011ed: 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1922 + + // WARNING: Haven't yet figured out why this doesn't work on MacOS... +#ifndef __APPLE__ + code = setrlimit(RLIMIT_STACK, &lim); + while (code) { + fprintf(stderr, " [gibbon rts] Failed to set stack size to %lu, code %d\n", + 4011f0: 48 8b 54 24 40 mov 0x40(%rsp),%rdx + 4011f5: 48 8b 3d 04 3f 00 00 mov 0x3f04(%rip),%rdi # 405100 + 4011fc: be 20 35 40 00 mov $0x403520,%esi + 401201: 31 c0 xor %eax,%eax + 401203: e8 08 ff ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1924 + (uint64_t)lim.rlim_cur, code); + lim.rlim_cur /= 2; + 401208: 48 8b 44 24 40 mov 0x40(%rsp),%rax + 40120d: 48 d1 e8 shr $1,%rax + 401210: 48 89 44 24 40 mov %rax,0x40(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1926 + // lim.rlim_max /= 2; + if(lim.rlim_cur < 100 * 1024) { + 401215: 48 3d ff 8f 01 00 cmp $0x18fff,%rax + 40121b: 0f 86 ba 02 00 00 jbe 4014db +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1920 + code = setrlimit(RLIMIT_STACK, &lim); + 401221: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401226: bf 03 00 00 00 mov $0x3,%edi + 40122b: e8 10 ff ff ff call 401140 + 401230: 89 c1 mov %eax,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1921 + while (code) { + 401232: 85 c0 test %eax,%eax + 401234: 75 ba jne 4011f0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 +#endif + + // int got_numargs = argc; // How many numeric arguments have we got. + + int i; + for (i = 1; i < argc; ++i) + 401236: 83 fb 01 cmp $0x1,%ebx + 401239: 0f 8e bc 02 00 00 jle 4014fb + 40123f: 48 8b 44 24 08 mov 0x8(%rsp),%rax + 401244: 8d 6b fe lea -0x2(%rbx),%ebp + 401247: 41 be 02 00 00 00 mov $0x2,%r14d + 40124d: 41 bf 01 00 00 00 mov $0x1,%r15d + 401253: 83 e5 fe and $0xfffffffe,%ebp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + check_args(i, argc, argv, "--array-input-length"); + gib_global_arrayfile_length_param = atoll(argv[i+1]); + i++; + } + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 401256: 44 8d 63 ff lea -0x1(%rbx),%r12d + 40125a: 4c 8d 68 10 lea 0x10(%rax),%r13 + 40125e: 83 c5 03 add $0x3,%ebp + 401261: eb 43 jmp 4012a6 + 401263: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 401268: 45 39 fc cmp %r15d,%r12d + 40126b: 0f 8e cf 00 00 00 jle 401340 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401271: 44 39 f3 cmp %r14d,%ebx + 401274: 0f 8e 7b 08 00 00 jle 401af5 +/usr/include/stdlib.h:376 + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); + 40127a: 49 8b 7d 00 mov 0x0(%r13),%rdi + 40127e: ba 0a 00 00 00 mov $0xa,%edx + 401283: 31 f6 xor %esi,%esi + 401285: e8 76 fe ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1945 + gib_global_biginf_init_chunk_size = atoll(argv[i + 1]); + 40128a: 48 89 05 3f 3e 00 00 mov %rax,0x3e3f(%rip) # 4050d0 + 401291: 41 83 c7 02 add $0x2,%r15d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1937 + for (i = 1; i < argc; ++i) + 401295: 41 83 c6 02 add $0x2,%r14d + 401299: 49 83 c5 10 add $0x10,%r13 + 40129d: 41 39 ef cmp %ebp,%r15d + 4012a0: 0f 84 55 02 00 00 je 4014fb +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1939 + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + 4012a6: 4d 8b 45 f8 mov -0x8(%r13),%r8 + 4012aa: 41 80 38 2d cmpb $0x2d,(%r8) + 4012ae: 75 12 jne 4012c2 + 4012b0: 41 80 78 01 68 cmpb $0x68,0x1(%r8) + 4012b5: 75 0b jne 4012c2 + 4012b7: 41 80 78 02 00 cmpb $0x0,0x2(%r8) + 4012bc: 0f 84 83 01 00 00 je 401445 + 4012c2: bf 54 36 40 00 mov $0x403654,%edi + 4012c7: b9 07 00 00 00 mov $0x7,%ecx + 4012cc: 4c 89 c6 mov %r8,%rsi + 4012cf: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4012d1: 0f 97 c0 seta %al + 4012d4: 1c 00 sbb $0x0,%al + 4012d6: 84 c0 test %al,%al + 4012d8: 0f 84 67 01 00 00 je 401445 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1943 + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) { + 4012de: bf 5b 36 40 00 mov $0x40365b,%edi + 4012e3: b9 15 00 00 00 mov $0x15,%ecx + 4012e8: 4c 89 c6 mov %r8,%rsi + 4012eb: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4012ed: 0f 97 c0 seta %al + 4012f0: 1c 00 sbb $0x0,%al + 4012f2: 84 c0 test %al,%al + 4012f4: 0f 84 6e ff ff ff je 401268 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1948 + else if (strcmp(argv[i], "--inf-buffer-size") == 0 && i < argc - 1) { + 4012fa: bf 70 36 40 00 mov $0x403670,%edi + 4012ff: b9 12 00 00 00 mov $0x12,%ecx + 401304: 4c 89 c6 mov %r8,%rsi + 401307: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 401309: 0f 97 c0 seta %al + 40130c: 1c 00 sbb $0x0,%al + 40130e: 84 c0 test %al,%al + 401310: 75 2e jne 401340 + 401312: 45 39 fc cmp %r15d,%r12d + 401315: 7e 29 jle 401340 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401317: 44 39 f3 cmp %r14d,%ebx + 40131a: 0f 8e c1 07 00 00 jle 401ae1 +/usr/include/stdlib.h:376 + 401320: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401324: ba 0a 00 00 00 mov $0xa,%edx + 401329: 31 f6 xor %esi,%esi + 40132b: e8 d0 fd ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1950 + gib_global_inf_init_chunk_size = atoll(argv[i + 1]); + 401330: 48 89 05 91 3d 00 00 mov %rax,0x3d91(%rip) # 4050c8 + 401337: e9 55 ff ff ff jmp 401291 + 40133c: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1953 + else if ((strcmp(argv[i], "--bench-input") == 0)) { + 401340: bf 82 36 40 00 mov $0x403682,%edi + 401345: b9 0e 00 00 00 mov $0xe,%ecx + 40134a: 4c 89 c6 mov %r8,%rsi + 40134d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40134f: 0f 97 c0 seta %al + 401352: 1c 00 sbb $0x0,%al + 401354: 84 c0 test %al,%al + 401356: 75 18 jne 401370 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401358: 44 39 f3 cmp %r14d,%ebx + 40135b: 0f 8f 30 ff ff ff jg 401291 + 401361: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401366: be 82 36 40 00 mov $0x403682,%esi + 40136b: e8 70 0d 00 00 call 4020e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1958 + else if ((strcmp(argv[i], "--array-input") == 0)) { + 401370: bf 90 36 40 00 mov $0x403690,%edi + 401375: b9 0e 00 00 00 mov $0xe,%ecx + 40137a: 4c 89 c6 mov %r8,%rsi + 40137d: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 40137f: 0f 97 c0 seta %al + 401382: 1c 00 sbb $0x0,%al + 401384: 84 c0 test %al,%al + 401386: 75 18 jne 4013a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401388: 44 39 f3 cmp %r14d,%ebx + 40138b: 0f 8f 00 ff ff ff jg 401291 + 401391: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401396: be 90 36 40 00 mov $0x403690,%esi + 40139b: e8 40 0d 00 00 call 4020e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1963 + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + 4013a0: bf 9e 36 40 00 mov $0x40369e,%edi + 4013a5: b9 15 00 00 00 mov $0x15,%ecx + 4013aa: 4c 89 c6 mov %r8,%rsi + 4013ad: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013af: 0f 97 c0 seta %al + 4013b2: 1c 00 sbb $0x0,%al + 4013b4: 84 c0 test %al,%al + 4013b6: 75 28 jne 4013e0 + 4013b8: 45 39 fc cmp %r15d,%r12d + 4013bb: 7e 4b jle 401408 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 4013bd: 44 39 f3 cmp %r14d,%ebx + 4013c0: 0f 8e da 07 00 00 jle 401ba0 +/usr/include/stdlib.h:376 + 4013c6: 49 8b 7d 00 mov 0x0(%r13),%rdi + 4013ca: ba 0a 00 00 00 mov $0xa,%edx + 4013cf: 31 f6 xor %esi,%esi + 4013d1: e8 2a fd ff ff call 401100 + 4013d6: e9 b6 fe ff ff jmp 401291 + 4013db: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1968 + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + 4013e0: bf b3 36 40 00 mov $0x4036b3,%edi + 4013e5: b9 0d 00 00 00 mov $0xd,%ecx + 4013ea: 4c 89 c6 mov %r8,%rsi + 4013ed: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 4013ef: 0f 97 c0 seta %al + 4013f2: 1c 00 sbb $0x0,%al + 4013f4: 84 c0 test %al,%al + 4013f6: 75 10 jne 401408 + 4013f8: 45 39 fc cmp %r15d,%r12d + 4013fb: 0f 8f 8f 00 00 00 jg 401490 + 401401: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1975 + int len = strlen(argv[i+1]); + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + strncpy(gib_global_bench_prog_param,argv[i+1],len); + i++; + } + else if ((strcmp(argv[i], "--iterate") == 0)) { + 401408: bf c0 36 40 00 mov $0x4036c0,%edi + 40140d: b9 0a 00 00 00 mov $0xa,%ecx + 401412: 4c 89 c6 mov %r8,%rsi + 401415: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) + 401417: 0f 97 c0 seta %al + 40141a: 1c 00 sbb $0x0,%al + 40141c: 84 c0 test %al,%al + 40141e: 75 36 jne 401456 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401420: 44 39 f3 cmp %r14d,%ebx + 401423: 0f 8e 3d 07 00 00 jle 401b66 +/usr/include/stdlib.h:376 + 401429: 49 8b 7d 00 mov 0x0(%r13),%rdi + 40142d: ba 0a 00 00 00 mov $0xa,%edx + 401432: 31 f6 xor %esi,%esi + 401434: e8 c7 fc ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1977 + check_args(i, argc, argv, "--iterate"); + gib_global_iters_param = atoll(argv[i+1]); + 401439: 48 89 05 98 3c 00 00 mov %rax,0x3c98(%rip) # 4050d8 + 401440: e9 4c fe ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1940 + gib_show_usage(argv); + 401445: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 40144a: e8 01 09 00 00 call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1941 + exit(0); + 40144f: 31 ff xor %edi,%edi + 401451: e8 1a fd ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1980 + i++; + } + else if ((strcmp(argv[i], "--size-param") == 0)) { + 401456: be ca 36 40 00 mov $0x4036ca,%esi + 40145b: 4c 89 c7 mov %r8,%rdi + 40145e: e8 8d fc ff ff call 4010f0 + 401463: 85 c0 test %eax,%eax + 401465: 0f 85 53 07 00 00 jne 401bbe +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 40146b: 44 39 f3 cmp %r14d,%ebx + 40146e: 0f 8e 3b 07 00 00 jle 401baf +/usr/include/stdlib.h:376 + 401474: 49 8b 7d 00 mov 0x0(%r13),%rdi + 401478: ba 0a 00 00 00 mov $0xa,%edx + 40147d: 31 f6 xor %esi,%esi + 40147f: e8 7c fc ff ff call 401100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1982 + check_args(i, argc, argv, "--size-param"); + gib_global_size_param = atoll(argv[i+1]); + 401484: 48 89 05 55 3c 00 00 mov %rax,0x3c55(%rip) # 4050e0 + 40148b: e9 01 fe ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1877 + if (i+1 >= argc) { + 401490: 44 39 f3 cmp %r14d,%ebx + 401493: 0f 8e 7e 07 00 00 jle 401c17 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1970 + int len = strlen(argv[i+1]); + 401499: 49 8b 75 00 mov 0x0(%r13),%rsi + 40149d: 48 89 f7 mov %rsi,%rdi + 4014a0: 48 89 74 24 18 mov %rsi,0x18(%rsp) + 4014a5: e8 f6 fb ff ff call 4010a0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 4014aa: 8d 78 01 lea 0x1(%rax),%edi + 4014ad: 48 89 44 24 10 mov %rax,0x10(%rsp) + 4014b2: 48 63 ff movslq %edi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4014b5: e8 76 fc ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 4014ba: 48 8b 54 24 10 mov 0x10(%rsp),%rdx + 4014bf: 48 8b 74 24 18 mov 0x18(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4014c4: 48 89 c7 mov %rax,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1971 + gib_global_bench_prog_param = (char*) gib_alloc((len+1)*sizeof(char)); + 4014c7: 48 89 05 6a 3c 00 00 mov %rax,0x3c6a(%rip) # 405138 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1972 + strncpy(gib_global_bench_prog_param,argv[i+1],len); + 4014ce: 48 63 d2 movslq %edx,%rdx + 4014d1: e8 7a fb ff ff call 401050 + 4014d6: e9 b6 fd ff ff jmp 401291 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1927 + fprintf(stderr, " [gibbon rts] Failed setrlimit stack size to something reasonable; giving up.\n"); + 4014db: ba 4e 00 00 00 mov $0x4e,%edx + 4014e0: be 01 00 00 00 mov $0x1,%esi + 4014e5: bf 58 35 40 00 mov $0x403558,%edi + 4014ea: 48 8b 0d 0f 3c 00 00 mov 0x3c0f(%rip),%rcx # 405100 + 4014f1: e8 8a fc ff ff call 401180 + 4014f6: e9 3b fd ff ff jmp 401236 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1996 + } + } + + // Initialize gib_global_bench_prog_param to an empty string in case + // the runtime argument --bench-prog isn't passed. + if (gib_global_bench_prog_param == NULL) { + 4014fb: 48 83 3d 35 3c 00 00 cmpq $0x0,0x3c35(%rip) # 405138 + 401502: 00 + 401503: 0f 84 a7 05 00 00 je 401ab0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401509: bf f0 00 00 00 mov $0xf0,%edi + 40150e: e8 1d fc ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401513: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401517: 66 0f ef c9 pxor %xmm1,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40151b: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1587 + stats->gc_zct_mgmt_time = 0; + 401520: 48 c7 80 b0 00 00 00 movq $0x0,0xb0(%rax) + 401527: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1594 + stats->rootset_size = 0; + 40152b: 48 c7 80 e8 00 00 00 movq $0x0,0xe8(%rax) + 401532: 00 00 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1565 + stats->minor_collections = 0; + 401536: 0f 11 00 movups %xmm0,(%rax) + 401539: 0f 11 40 10 movups %xmm0,0x10(%rax) + 40153d: 0f 11 40 20 movups %xmm0,0x20(%rax) + 401541: 0f 11 40 30 movups %xmm0,0x30(%rax) + 401545: 0f 11 40 40 movups %xmm0,0x40(%rax) + 401549: 0f 11 40 50 movups %xmm0,0x50(%rax) + 40154d: 0f 11 40 60 movups %xmm0,0x60(%rax) + 401551: 0f 11 40 70 movups %xmm0,0x70(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1581 + stats->gc_elapsed_time = 0; + 401555: 0f 11 88 80 00 00 00 movups %xmm1,0x80(%rax) + 40155c: 0f 11 88 90 00 00 00 movups %xmm1,0x90(%rax) + 401563: 0f 11 88 a0 00 00 00 movups %xmm1,0xa0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1588 + stats->fwd_env_size = 0; + 40156a: 0f 11 80 b8 00 00 00 movups %xmm0,0xb8(%rax) + 401571: 0f 11 80 c8 00 00 00 movups %xmm0,0xc8(%rax) + 401578: 0f 11 80 d8 00 00 00 movups %xmm0,0xd8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1338 + gib_global_gc_stats = (GibGcStats *) gib_alloc(sizeof(GibGcStats)); + 40157f: 48 89 05 8a 3b 00 00 mov %rax,0x3b8a(%rip) # 405110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401586: e8 a5 fb ff ff call 401130 + 40158b: bf 00 00 40 00 mov $0x400000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1420 + nursery->heap_size = nsize; + 401590: 48 c7 00 00 00 40 00 movq $0x400000,(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401597: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1343 + gib_global_nurseries = (GibNursery *) gib_alloc(gib_global_num_threads * + 40159a: 48 89 05 8f 3b 00 00 mov %rax,0x3b8f(%rip) # 405130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015a1: e8 8a fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1421 + nursery->heap_start = (char *) gib_alloc(nsize); + 4015a6: 48 89 43 08 mov %rax,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1422 + if (nursery->heap_start == NULL) { + 4015aa: 48 85 c0 test %rax,%rax + 4015ad: 0f 84 93 05 00 00 je 401b46 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4015b3: 48 05 00 00 40 00 add $0x400000,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015b9: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1427 + nursery->heap_end = nursery->heap_start + nsize; + 4015be: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1428 + nursery->alloc = nursery->heap_end; + 4015c2: 48 89 43 18 mov %rax,0x18(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015c6: e8 65 fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4015cb: 66 0f ef c0 pxor %xmm0,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015cf: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1454 + oldgen->old_zct = (void *) NULL; + 4015d4: 0f 11 40 08 movups %xmm0,0x8(%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015d8: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1350 + gib_global_oldgen = (GibOldgen *) gib_alloc(sizeof(GibOldgen)); + 4015db: 48 89 05 36 3b 00 00 mov %rax,0x3b36(%rip) # 405118 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015e2: e8 49 fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1457 + oldgen->rem_set = (GibRememberedSet *) gib_alloc(sizeof(GibRememberedSet)); + 4015e7: 48 89 45 00 mov %rax,0x0(%rbp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015eb: 48 89 c3 mov %rax,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1458 + if (oldgen->rem_set == NULL) { + 4015ee: 48 85 c0 test %rax,%rax + 4015f1: 0f 84 7e 05 00 00 je 401b75 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 4015f7: bf 00 00 00 06 mov $0x6000000,%edi + 4015fc: e8 2f fb ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401601: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401604: 48 85 c0 test %rax,%rax + 401607: 0f 84 e3 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40160d: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401614: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401618: bf 18 00 00 00 mov $0x18,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40161d: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401621: e8 0a fb ff ff call 401130 + 401626: bf 18 00 00 00 mov $0x18,%edi + 40162b: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1355 + gib_global_read_shadowstacks = + 40162e: 48 89 05 f3 3a 00 00 mov %rax,0x3af3(%rip) # 405128 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401635: e8 f6 fa ff ff call 401130 + 40163a: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1358 + gib_global_write_shadowstacks = + 40163f: 48 89 05 da 3a 00 00 mov %rax,0x3ada(%rip) # 405120 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401646: 48 89 c3 mov %rax,%rbx + 401649: e8 e2 fa ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 40164e: 49 89 04 24 mov %rax,(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401652: 48 85 c0 test %rax,%rax + 401655: 0f 84 95 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40165b: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401662: 49 89 44 24 10 mov %rax,0x10(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401667: bf 00 00 00 06 mov $0x6000000,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 40166c: 49 89 54 24 08 mov %rdx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401671: e8 ba fa ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1485 + stack->start = (char *) gib_alloc(stack_size); + 401676: 48 89 03 mov %rax,(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1486 + if (stack->start == NULL) { + 401679: 48 85 c0 test %rax,%rax + 40167c: 0f 84 6e 04 00 00 je 401af0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401682: 48 8d 90 00 00 00 06 lea 0x6000000(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1492 + stack->alloc = stack->start; + 401689: 48 89 43 10 mov %rax,0x10(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + +#ifndef _GIBBON_POINTER + // Initialize the nursery and shadow stack. + gib_storage_initialize(); + GibOldgen *oldgen = DEFAULT_GENERATION; + gib_init_zcts(oldgen); + 40168d: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1491 + stack->end = stack->start + stack_size; + 401690: 48 89 53 08 mov %rdx,0x8(%rbx) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2014 + gib_init_zcts(oldgen); + 401694: e8 c7 f9 ff ff call 401060 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2017 + + // Minimal test to see if FFI is set up correctly. + gib_check_rust_struct_sizes(); + 401699: e8 a2 0a 00 00 call 402140 +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:70 + int error = gib_info_table_initialize(7); + 40169e: bf 07 00 00 00 mov $0x7,%edi + 4016a3: e8 38 fa ff ff call 4010e0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:72 + if (error < 0) { + 4016a8: 85 c0 test %eax,%eax + 4016aa: 0f 88 d1 04 00 00 js 401b81 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:79 + gib_info_table_finalize(); + 4016b0: e8 ab fa ff ff call 401160 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:78 + return gib_global_size_param; + 4016b5: 4c 8b 3d 24 3a 00 00 mov 0x3a24(%rip),%r15 # 4050e0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:93 + if (fltIf_612_633) { + 4016bc: 41 be 00 00 00 00 mov $0x0,%r14d + 4016c2: 4d 85 ff test %r15,%r15 + 4016c5: 4d 0f 49 f7 cmovns %r15,%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:155 + + GibInt n_6_549_620 = gib_get_size_param(); + GibInt n_16_573_596_621 = gib_get_size_param(); + GibInt n__19_575_598_623 = maxInt(n_16_573_596_621, 0); + GibInt tmp_7 = sizeof(GibInt); + GibVector *vec_20_576_599_624 = gib_vector_alloc(n__19_575_598_623, tmp_7); + 4016c9: 4c 89 f7 mov %r14,%rdi + 4016cc: e8 6f 09 00 00 call 402040 + 4016d1: 49 89 c4 mov %rax,%r12 +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 4016d4: 4d 85 ff test %r15,%r15 + 4016d7: 7e 13 jle 4016ec + 4016d9: 4c 89 f9 mov %r15,%rcx + 4016dc: 4c 89 f2 mov %r14,%rdx + 4016df: 31 f6 xor %esi,%esi + 4016e1: 48 89 c7 mov %rax,%rdi + 4016e4: e8 27 07 00 00 call 401e10 + 4016e9: 49 89 c4 mov %rax,%r12 +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *vec1_21_577_600_625 = + generate_loop_398_533(vec_20_576_599_624, 0, n__19_575_598_623, n_6_549_620); + GibVector *timed_671; + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 4016ec: 48 8b 3d e5 39 00 00 mov 0x39e5(%rip),%rdi # 4050d8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + sizeof(double)); + struct timespec begin_timed_671; + struct timespec end_timed_671; + + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4016f3: 45 31 f6 xor %r14d,%r14d +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 4016f6: e8 45 09 00 00 call 402040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4016fb: 48 83 3d d5 39 00 00 cmpq $0x0,0x39d5(%rip) # 4050d8 + 401702: 00 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:159 + GibVector *times_5 = gib_vector_alloc(gib_get_iters_param(), + 401703: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 401706: 0f 8e b8 01 00 00 jle 4018c4 + 40170c: 0f 1f 40 00 nopl 0x0(%rax) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:170 + iters_timed_671++) { + if (iters_timed_671 != gib_get_iters_param() - 1) { + gib_list_bumpalloc_save_state(); + gib_ptr_bumpalloc_save_state(); + } + clock_gettime(CLOCK_MONOTONIC_RAW, &begin_timed_671); + 401710: 48 8d 74 24 40 lea 0x40(%rsp),%rsi + 401715: bf 04 00 00 00 mov $0x4,%edi + 40171a: 41 bf 00 00 00 00 mov $0x0,%r15d + 401720: e8 6b f9 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 401725: 49 8b 5c 24 08 mov 0x8(%r12),%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40172a: bf 20 00 00 00 mov $0x20,%edi + 40172f: 49 2b 1c 24 sub (%r12),%rbx + 401733: 4c 0f 49 fb cmovns %rbx,%r15 + 401737: e8 f4 f9 ff ff call 401130 + 40173c: 49 89 c5 mov %rax,%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 40173f: 48 85 c0 test %rax,%rax + 401742: 0f 84 dc 03 00 00 je 401b24 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 401748: 4a 8d 3c fd 00 00 00 lea 0x0(,%r15,8),%rdi + 40174f: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401750: e8 db f9 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 401755: 48 85 c0 test %rax,%rax + 401758: 0f 84 a6 03 00 00 je 401b04 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 40175e: 49 c7 45 00 00 00 00 movq $0x0,0x0(%r13) + 401765: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 401766: 4d 89 7d 08 mov %r15,0x8(%r13) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 40176a: 49 c7 45 10 08 00 00 movq $0x8,0x10(%r13) + 401771: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 401772: 49 89 45 18 mov %rax,0x18(%r13) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401776: 48 85 db test %rbx,%rbx + 401779: 0f 8e c1 00 00 00 jle 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 40177f: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401784: 49 0f af 14 24 imul (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401789: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 40178e: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401792: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401796: 48 89 10 mov %rdx,(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401799: 48 83 fb 01 cmp $0x1,%rbx + 40179d: 0f 84 9d 00 00 00 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017a3: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017a7: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017ac: 48 83 c2 01 add $0x1,%rdx + 4017b0: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 4017b6: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 4017ba: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4017be: 48 89 50 08 mov %rdx,0x8(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 4017c2: 48 83 fb 02 cmp $0x2,%rbx + 4017c6: 74 78 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017c8: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017cc: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017d1: 48 83 c2 02 add $0x2,%rdx + 4017d5: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 4017db: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 4017df: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4017e3: 48 89 50 10 mov %rdx,0x10(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 4017e7: 48 83 fb 03 cmp $0x3,%rbx + 4017eb: 74 53 je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4017ed: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 4017f1: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4017f6: 48 83 c2 03 add $0x3,%rdx + 4017fa: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401800: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401804: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401808: 48 89 50 18 mov %rdx,0x18(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 40180c: 48 83 fb 04 cmp $0x4,%rbx + 401810: 74 2e je 401840 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401812: 49 8b 14 24 mov (%r12),%rdx +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401816: 49 8b 4c 24 18 mov 0x18(%r12),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 40181b: 48 83 c2 04 add $0x4,%rdx + 40181f: 49 0f af 54 24 10 imul 0x10(%r12),%rdx +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401825: 48 8b 14 11 mov (%rcx,%rdx,1),%rdx + 401829: 48 83 c2 01 add $0x1,%rdx +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40182d: 48 89 50 20 mov %rdx,0x20(%rax) +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401831: 48 83 fb 05 cmp $0x5,%rbx + 401835: 0f 85 8e 02 00 00 jne 401ac9 + 40183b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) +main(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:181 + tmp_1); + GibVector *vec1_21_590_648_664 = + generate_loop_398_536(vec_20_589_647_663, 0, n__19_588_646_662, vec1_21_577_600_625); + + timed_671 = vec1_21_590_648_664; + clock_gettime(CLOCK_MONOTONIC_RAW, &end_timed_671); + 401840: 48 8d 74 24 30 lea 0x30(%rsp),%rsi + 401845: bf 04 00 00 00 mov $0x4,%edi + 40184a: e8 41 f8 ff ff call 401090 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40184f: 48 8b 44 24 38 mov 0x38(%rsp),%rax + 401854: 66 0f ef c0 pxor %xmm0,%xmm0 + 401858: 48 2b 44 24 48 sub 0x48(%rsp),%rax + 40185d: f2 48 0f 2a c0 cvtsi2sd %rax,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1827 + return (double)(t1->tv_sec - t0->tv_sec) + 401862: 66 0f ef c9 pxor %xmm1,%xmm1 + 401866: 48 8b 44 24 30 mov 0x30(%rsp),%rax + 40186b: 48 2b 44 24 40 sub 0x40(%rsp),%rax + 401870: f2 48 0f 2a c8 cvtsi2sd %rax,%xmm1 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:189 + gib_ptr_bumpalloc_restore_state(); + } + + double itertime_2 = gib_difftimespecs(&begin_timed_671, &end_timed_671); + + printf("itertime: %lf\n", itertime_2); + 401875: bf f7 36 40 00 mov $0x4036f7,%edi + 40187a: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1828 + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); + 40187f: f2 0f 5e 05 01 1f 00 divsd 0x1f01(%rip),%xmm0 # 403788 <__PRETTY_FUNCTION__.3+0x28> + 401886: 00 + 401887: f2 0f 58 c1 addsd %xmm1,%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:187 + double itertime_2 = gib_difftimespecs(&begin_timed_671, &end_timed_671); + 40188b: f2 0f 11 44 24 28 movsd %xmm0,0x28(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:189 + printf("itertime: %lf\n", itertime_2); + 401891: e8 1a f8 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401896: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 40189a: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40189e: 48 8d 74 24 28 lea 0x28(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018a3: 4c 01 f7 add %r14,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:165 + iters_timed_671++) { + 4018a6: 49 83 c6 01 add $0x1,%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 4018aa: 48 0f af fa imul %rdx,%rdi + 4018ae: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 4018b2: e8 69 f8 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:164 + for (long long iters_timed_671 = 0; iters_timed_671 < gib_get_iters_param(); + 4018b7: 4c 3b 35 1a 38 00 00 cmp 0x381a(%rip),%r14 # 4050d8 + 4018be: 0f 8c 4c fe ff ff jl 401710 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018c4: 48 8b 55 10 mov 0x10(%rbp),%rdx + 4018c8: 48 8b 7d 00 mov 0x0(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 4018cc: b9 30 1d 40 00 mov $0x401d30,%ecx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 4018d1: 48 8b 75 08 mov 0x8(%rbp),%rsi + 4018d5: 48 29 fe sub %rdi,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018d8: 48 0f af fa imul %rdx,%rdi + 4018dc: 48 03 7d 18 add 0x18(%rbp),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:599 + qsort(start, gib_vector_length(vec), vec->elt_size, compar); + 4018e0: e8 9b f7 ff ff call 401080 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + gib_vector_inplace_update(times_5, iters_timed_671, &itertime_2); + } + gib_vector_inplace_sort(times_5, gib_compare_doubles); + + double *tmp_6 = (double *) gib_vector_nth(times_5, gib_get_iters_param() / + 4018e5: 48 8b 05 ec 37 00 00 mov 0x37ec(%rip),%rax # 4050d8 + 4018ec: 41 b8 02 00 00 00 mov $0x2,%r8d +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 4018f2: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 4018f6: 48 8b 75 10 mov 0x10(%rbp),%rsi + 4018fa: 48 8b 4d 18 mov 0x18(%rbp),%rcx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + 4018fe: 48 99 cqto +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401900: 4c 8b 25 79 1e 00 00 mov 0x1e79(%rip),%r12 # 403780 <__PRETTY_FUNCTION__.3+0x20> +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:194 + 401907: 49 f7 f8 idiv %r8 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 40190a: 48 8b 55 08 mov 0x8(%rbp),%rdx + 40190e: 48 29 fa sub %rdi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401911: 48 01 f8 add %rdi,%rax + 401914: 48 0f af c6 imul %rsi,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:196 + 2); + double selftimed_4 = *tmp_6; + 401918: 4c 8b 34 01 mov (%rcx,%rax,1),%r14 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 40191c: 48 85 d2 test %rdx,%rdx + 40191f: 7e 2d jle 40194e + 401921: 48 0f af fe imul %rsi,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:693 + double acc = 0; + 401925: 4c 8b 25 54 1e 00 00 mov 0x1e54(%rip),%r12 # 403780 <__PRETTY_FUNCTION__.3+0x20> + 40192c: 48 8d 04 39 lea (%rcx,%rdi,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401930: 66 49 0f 6e d4 movq %r12,%xmm2 + 401935: f2 0f 58 10 addsd (%rax),%xmm2 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 401939: 83 44 24 04 01 addl $0x1,0x4(%rsp) + 40193e: 48 01 f0 add %rsi,%rax + 401941: 8b 5c 24 04 mov 0x4(%rsp),%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:696 + acc += *d; + 401945: 66 49 0f 7e d4 movq %xmm2,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:694 + for(int i = 0; i < gib_vector_length(times); i++) { + 40194a: 39 d3 cmp %edx,%ebx + 40194c: 75 e2 jne 401930 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 40194e: bf 06 37 40 00 mov $0x403706,%edi + 401953: 31 c0 xor %eax,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401955: 31 db xor %ebx,%ebx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:674 + printf("ITER TIMES: ["); + 401957: e8 54 f7 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:533 + return (vec->upper - vec->lower); + 40195c: 4c 8b 6d 08 mov 0x8(%rbp),%r13 + 401960: 4c 2b 6d 00 sub 0x0(%rbp),%r13 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 401964: 4d 8d 7d ff lea -0x1(%r13),%r15 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401968: 4d 85 ed test %r13,%r13 + 40196b: 7e 39 jle 4019a6 + 40196d: 0f 1f 00 nopl (%rax) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401970: 48 8b 45 00 mov 0x0(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401974: 48 8b 55 18 mov 0x18(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401978: 48 01 d8 add %rbx,%rax + 40197b: 48 0f af 45 10 imul 0x10(%rbp),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401980: f2 0f 10 04 02 movsd (%rdx,%rax,1),%xmm0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:679 + if (i == (n-1)) { + 401985: 49 39 df cmp %rbx,%r15 + 401988: 0f 84 01 01 00 00 je 401a8f +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 40198e: bf 5b 37 40 00 mov $0x40375b,%edi + 401993: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401998: 48 83 c3 01 add $0x1,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:683 + printf("%f, ",*d); + 40199c: e8 0f f7 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 4019a1: 49 39 dd cmp %rbx,%r13 + 4019a4: 75 ca jne 401970 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:686 + printf("]\n"); + 4019a6: bf 14 37 40 00 mov $0x403714,%edi + 4019ab: e8 c0 f6 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4019b0: 48 8b 7d 18 mov 0x18(%rbp),%rdi + 4019b4: e8 77 f6 ff ff call 401030 + 4019b9: 48 89 ef mov %rbp,%rdi + 4019bc: e8 6f f6 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:201 + double batchtime_3 = gib_sum_timing_array(times_5); + + gib_print_timing_array(times_5); + gib_vector_free(times_5); + printf("ITERS: %ld\n", gib_get_iters_param()); + 4019c1: 48 8b 35 10 37 00 00 mov 0x3710(%rip),%rsi # 4050d8 + 4019c8: bf 16 37 40 00 mov $0x403716,%edi + 4019cd: 31 c0 xor %eax,%eax + 4019cf: e8 dc f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:202 + printf("SIZE: %ld\n", gib_get_size_param()); + 4019d4: 48 8b 35 05 37 00 00 mov 0x3705(%rip),%rsi # 4050e0 + 4019db: bf 22 37 40 00 mov $0x403722,%edi + 4019e0: 31 c0 xor %eax,%eax + 4019e2: e8 c9 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:203 + printf("BATCHTIME: %e\n", batchtime_3); + 4019e7: 66 49 0f 6e c4 movq %r12,%xmm0 + 4019ec: bf 2d 37 40 00 mov $0x40372d,%edi + 4019f1: b8 01 00 00 00 mov $0x1,%eax + 4019f6: e8 b5 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:204 + printf("SELFTIMED: %e\n", selftimed_4); + 4019fb: 66 49 0f 6e c6 movq %r14,%xmm0 + 401a00: bf 3c 37 40 00 mov $0x40373c,%edi + 401a05: b8 01 00 00 00 mov $0x1,%eax + 401a0a: e8 a1 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:205 + printf("'#("); + 401a0f: bf 4b 37 40 00 mov $0x40374b,%edi + 401a14: 31 c0 xor %eax,%eax + 401a16: e8 95 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:206 + printf(""); + 401a1b: bf 4f 37 40 00 mov $0x40374f,%edi + 401a20: 31 c0 xor %eax,%eax + 401a22: e8 89 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:207 + printf(" "); + 401a27: bf 20 00 00 00 mov $0x20,%edi + 401a2c: e8 0f f6 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:208 + printf(""); + 401a31: bf 4f 37 40 00 mov $0x40374f,%edi + 401a36: 31 c0 xor %eax,%eax + 401a38: e8 73 f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:209 + printf(")"); + 401a3d: bf 29 00 00 00 mov $0x29,%edi + 401a42: e8 f9 f5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:210 + printf("\n"); + 401a47: bf 0a 00 00 00 mov $0xa,%edi + 401a4c: e8 ef f5 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 + 401a51: 48 8b 3d e0 36 00 00 mov 0x36e0(%rip),%rdi # 405138 + 401a58: e8 d3 f5 ff ff call 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:2042 + GibShadowstack *rstack = DEFAULT_READ_SHADOWSTACK; + GibShadowstack *wstack = DEFAULT_WRITE_SHADOWSTACK; + GibOldgen *oldgen = DEFAULT_GENERATION; + + // Free all objects initialized by the Rust RTS. + gib_gc_cleanup(rstack, wstack, nursery, oldgen); + 401a5d: 48 8b 0d b4 36 00 00 mov 0x36b4(%rip),%rcx # 405118 + 401a64: 48 8b 15 c5 36 00 00 mov 0x36c5(%rip),%rdx # 405130 + 401a6b: 48 8b 35 ae 36 00 00 mov 0x36ae(%rip),%rsi # 405120 + 401a72: 48 8b 3d af 36 00 00 mov 0x36af(%rip),%rdi # 405128 + 401a79: e8 42 f6 ff ff call 4010c0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:215 + + int exit_9 = gib_exit(); + + return exit_9; + 401a7e: 48 83 c4 58 add $0x58,%rsp + 401a82: 31 c0 xor %eax,%eax + 401a84: 5b pop %rbx + 401a85: 5d pop %rbp + 401a86: 41 5c pop %r12 + 401a88: 41 5d pop %r13 + 401a8a: 41 5e pop %r14 + 401a8c: 41 5f pop %r15 + 401a8e: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401a8f: bf 58 37 40 00 mov $0x403758,%edi + 401a94: b8 01 00 00 00 mov $0x1,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401a99: 49 8d 5f 01 lea 0x1(%r15),%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:680 + printf("%f",*d); + 401a9d: e8 0e f6 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:677 + for(GibInt i = 0; i < n; i++) { + 401aa2: 4c 39 eb cmp %r13,%rbx + 401aa5: 0f 85 c5 fe ff ff jne 401970 + 401aab: e9 f6 fe ff ff jmp 4019a6 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 401ab0: bf 01 00 00 00 mov $0x1,%edi + 401ab5: e8 76 f6 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1997 + gib_global_bench_prog_param = (char*) gib_alloc(1*sizeof(char)); + 401aba: 48 89 05 77 36 00 00 mov %rax,0x3677(%rip) # 405138 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + *gib_global_bench_prog_param = '\n'; + 401ac1: c6 00 0a movb $0xa,(%rax) + 401ac4: e9 40 fa ff ff jmp 401509 +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1998 + 401ac9: 4c 89 e1 mov %r12,%rcx + 401acc: 4c 89 fa mov %r15,%rdx + 401acf: be 05 00 00 00 mov $0x5,%esi + 401ad4: 4c 89 ef mov %r13,%rdi + 401ad7: e8 34 04 00 00 call 401f10 + 401adc: e9 5f fd ff ff jmp 401840 + 401ae1: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401ae6: be 70 36 40 00 mov $0x403670,%esi + 401aeb: e8 f0 05 00 00 call 4020e0 + 401af0: e8 1b 06 00 00 call 402110 + 401af5: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401afa: be 5b 36 40 00 mov $0x40365b,%esi + 401aff: e8 dc 05 00 00 call 4020e0 +main(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 401b04: 48 8b 3d f5 35 00 00 mov 0x35f5(%rip),%rdi # 405100 + 401b0b: ba 08 00 00 00 mov $0x8,%edx + 401b10: be 18 33 40 00 mov $0x403318,%esi + 401b15: e8 f6 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 401b1a: bf 01 00 00 00 mov $0x1,%edi + 401b1f: e8 4c f6 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 401b24: ba 20 00 00 00 mov $0x20,%edx + 401b29: be 18 33 40 00 mov $0x403318,%esi + 401b2e: 48 8b 3d cb 35 00 00 mov 0x35cb(%rip),%rdi # 405100 + 401b35: 31 c0 xor %eax,%eax + 401b37: e8 d4 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 401b3c: bf 01 00 00 00 mov $0x1,%edi + 401b41: e8 2a f6 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1423 + fprintf(stderr, "gib_nursery_initialize: gib_alloc failed: %zu", + 401b46: 48 8b 3d b3 35 00 00 mov 0x35b3(%rip),%rdi # 405100 + 401b4d: ba 00 00 40 00 mov $0x400000,%edx + 401b52: be a8 35 40 00 mov $0x4035a8,%esi + 401b57: e8 b4 f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1425 + exit(1); + 401b5c: bf 01 00 00 00 mov $0x1,%edi + 401b61: e8 0a f6 ff ff call 401170 + 401b66: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401b6b: be c0 36 40 00 mov $0x4036c0,%esi + 401b70: e8 6b 05 00 00 call 4020e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1459 + fprintf(stderr, "gib_oldgen_initialize: gib_alloc failed: %zu", + 401b75: ba 18 00 00 00 mov $0x18,%edx + 401b7a: be d8 35 40 00 mov $0x4035d8,%esi + 401b7f: eb ad jmp 401b2e +info_table_initialize(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:73 + fprintf(stderr, "Couldn't initialize info table, errorno=%d", error); + 401b81: 89 c2 mov %eax,%edx + 401b83: be 08 36 40 00 mov $0x403608,%esi + 401b88: 48 8b 3d 71 35 00 00 mov 0x3571(%rip),%rdi # 405100 + 401b8f: 31 c0 xor %eax,%eax + 401b91: e8 7a f5 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:74 + exit(1); + 401b96: bf 01 00 00 00 mov $0x1,%edi + 401b9b: e8 d0 f5 ff ff call 401170 + 401ba0: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401ba5: be 9e 36 40 00 mov $0x40369e,%esi + 401baa: e8 31 05 00 00 call 4020e0 + 401baf: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401bb4: be ca 36 40 00 mov $0x4036ca,%esi + 401bb9: e8 22 05 00 00 call 4020e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1987 + fprintf(stderr, "Extra arguments left over: "); + 401bbe: 48 8b 0d 3b 35 00 00 mov 0x353b(%rip),%rcx # 405100 + 401bc5: ba 1b 00 00 00 mov $0x1b,%edx + 401bca: be 01 00 00 00 mov $0x1,%esi + 401bcf: 4d 63 ff movslq %r15d,%r15 + 401bd2: bf d7 36 40 00 mov $0x4036d7,%edi + 401bd7: e8 a4 f5 ff ff call 401180 + 401bdc: eb 20 jmp 401bfe +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1988 + for(; i < argc; i++) fprintf(stderr, "%s ", argv[i]); + 401bde: 48 8b 44 24 08 mov 0x8(%rsp),%rax + 401be3: 48 8b 3d 16 35 00 00 mov 0x3516(%rip),%rdi # 405100 + 401bea: be f3 36 40 00 mov $0x4036f3,%esi + 401bef: 4a 8b 14 f8 mov (%rax,%r15,8),%rdx + 401bf3: 31 c0 xor %eax,%eax + 401bf5: 49 83 c7 01 add $0x1,%r15 + 401bf9: e8 12 f5 ff ff call 401110 + 401bfe: 44 39 fb cmp %r15d,%ebx + 401c01: 7f db jg 401bde +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1989 + gib_show_usage(argv); + 401c03: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401c08: e8 43 01 00 00 call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1990 + exit(1); + 401c0d: bf 01 00 00 00 mov $0x1,%edi + 401c12: e8 59 f5 ff ff call 401170 + 401c17: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi + 401c1c: be b3 36 40 00 mov $0x4036b3,%esi + 401c21: e8 ba 04 00 00 call 4020e0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1910 + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + 401c26: 89 c2 mov %eax,%edx + 401c28: be f0 34 40 00 mov $0x4034f0,%esi + 401c2d: e9 56 ff ff ff jmp 401b88 +main(): + 401c32: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c39: 00 00 00 + 401c3c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401c40 <_start>: +_start(): + 401c40: f3 0f 1e fa endbr64 + 401c44: 31 ed xor %ebp,%ebp + 401c46: 49 89 d1 mov %rdx,%r9 + 401c49: 5e pop %rsi + 401c4a: 48 89 e2 mov %rsp,%rdx + 401c4d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 401c51: 50 push %rax + 401c52: 54 push %rsp + 401c53: 45 31 c0 xor %r8d,%r8d + 401c56: 31 c9 xor %ecx,%ecx + 401c58: 48 c7 c7 a0 11 40 00 mov $0x4011a0,%rdi + 401c5f: ff 15 73 33 00 00 call *0x3373(%rip) # 404fd8 <__libc_start_main@GLIBC_2.34> + 401c65: f4 hlt + 401c66: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c6d: 00 00 00 + +0000000000401c70 <_dl_relocate_static_pie>: +_dl_relocate_static_pie(): + 401c70: f3 0f 1e fa endbr64 + 401c74: c3 ret + 401c75: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401c7c: 00 00 00 + 401c7f: 90 nop + +0000000000401c80 : +deregister_tm_clones(): + 401c80: b8 e8 50 40 00 mov $0x4050e8,%eax + 401c85: 48 3d e8 50 40 00 cmp $0x4050e8,%rax + 401c8b: 74 13 je 401ca0 + 401c8d: b8 00 00 00 00 mov $0x0,%eax + 401c92: 48 85 c0 test %rax,%rax + 401c95: 74 09 je 401ca0 + 401c97: bf e8 50 40 00 mov $0x4050e8,%edi + 401c9c: ff e0 jmp *%rax + 401c9e: 66 90 xchg %ax,%ax + 401ca0: c3 ret + 401ca1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401ca8: 00 00 00 00 + 401cac: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401cb0 : +register_tm_clones(): + 401cb0: be e8 50 40 00 mov $0x4050e8,%esi + 401cb5: 48 81 ee e8 50 40 00 sub $0x4050e8,%rsi + 401cbc: 48 89 f0 mov %rsi,%rax + 401cbf: 48 c1 ee 3f shr $0x3f,%rsi + 401cc3: 48 c1 f8 03 sar $0x3,%rax + 401cc7: 48 01 c6 add %rax,%rsi + 401cca: 48 d1 fe sar $1,%rsi + 401ccd: 74 11 je 401ce0 + 401ccf: b8 00 00 00 00 mov $0x0,%eax + 401cd4: 48 85 c0 test %rax,%rax + 401cd7: 74 07 je 401ce0 + 401cd9: bf e8 50 40 00 mov $0x4050e8,%edi + 401cde: ff e0 jmp *%rax + 401ce0: c3 ret + 401ce1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401ce8: 00 00 00 00 + 401cec: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401cf0 <__do_global_dtors_aux>: +__do_global_dtors_aux(): + 401cf0: 80 3d 11 34 00 00 00 cmpb $0x0,0x3411(%rip) # 405108 + 401cf7: 75 17 jne 401d10 <__do_global_dtors_aux+0x20> + 401cf9: 55 push %rbp + 401cfa: 48 89 e5 mov %rsp,%rbp + 401cfd: e8 7e ff ff ff call 401c80 + 401d02: c6 05 ff 33 00 00 01 movb $0x1,0x33ff(%rip) # 405108 + 401d09: 5d pop %rbp + 401d0a: c3 ret + 401d0b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + 401d10: c3 ret + 401d11: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401d18: 00 00 00 00 + 401d1c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401d20 : +frame_dummy(): + 401d20: eb 8e jmp 401cb0 + 401d22: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 401d29: 00 00 00 + 401d2c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401d30 : +gib_compare_doubles(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1835 + return (*da > *db) - (*da < *db); + 401d30: f2 0f 10 07 movsd (%rdi),%xmm0 + 401d34: f2 0f 10 0e movsd (%rsi),%xmm1 + 401d38: 31 c0 xor %eax,%eax + 401d3a: 66 0f 2f c1 comisd %xmm1,%xmm0 + 401d3e: 0f 97 c0 seta %al + 401d41: 31 d2 xor %edx,%edx + 401d43: 66 0f 2f c8 comisd %xmm0,%xmm1 + 401d47: 0f 97 c2 seta %dl + 401d4a: 29 d0 sub %edx,%eax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1836 +} + 401d4c: c3 ret + 401d4d: 0f 1f 00 nopl (%rax) + +0000000000401d50 : +gib_show_usage(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1797 +{ + 401d50: 53 push %rbx + 401d51: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1798 + printf("\n"); + 401d54: bf 0a 00 00 00 mov $0xa,%edi + 401d59: e8 e2 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1799 + printf("This binary was generated by the Gibbon compiler.\n"); + 401d5e: bf 08 30 40 00 mov $0x403008,%edi + 401d63: e8 08 f3 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1800 + printf("\n"); + 401d68: bf 0a 00 00 00 mov $0xa,%edi + 401d6d: e8 ce f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1801 + printf("Usage: %s [OPTIONS...]\n", argv[0]); + 401d72: 48 8b 33 mov (%rbx),%rsi + 401d75: bf 33 36 40 00 mov $0x403633,%edi + 401d7a: 31 c0 xor %eax,%eax + 401d7c: e8 2f f3 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1803 + printf("\n"); + 401d81: bf 0a 00 00 00 mov $0xa,%edi + 401d86: e8 b5 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1804 + printf("Options:\n"); + 401d8b: bf 4b 36 40 00 mov $0x40364b,%edi + 401d90: e8 db f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1805 + printf(" --biginf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_biginf_init_chunk_size); + 401d95: 48 8b 35 34 33 00 00 mov 0x3334(%rip),%rsi # 4050d0 + 401d9c: bf 40 30 40 00 mov $0x403040,%edi + 401da1: 31 c0 xor %eax,%eax + 401da3: e8 08 f3 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1806 + printf(" --inf-buffer-size Set the buffer size (default %" PRId64 ").\n", gib_global_inf_init_chunk_size); + 401da8: 48 8b 35 19 33 00 00 mov 0x3319(%rip),%rsi # 4050c8 + 401daf: bf 88 30 40 00 mov $0x403088,%edi + 401db4: 31 c0 xor %eax,%eax + 401db6: e8 f5 f2 ff ff call 4010b0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1807 + printf(" --bench-input Set the input file read for benchmarking. Applies only\n"); + 401dbb: bf d0 30 40 00 mov $0x4030d0,%edi + 401dc0: e8 ab f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1808 + printf(" If the program was *compiled* with --bench-fun. \n"); + 401dc5: bf 28 31 40 00 mov $0x403128,%edi + 401dca: e8 a1 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1809 + printf("\n"); + 401dcf: bf 0a 00 00 00 mov $0xa,%edi + 401dd4: e8 67 f2 ff ff call 401040 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1810 + printf(" --array-input Set the file from which to read the array input.\n"); + 401dd9: bf 80 31 40 00 mov $0x403180,%edi + 401dde: e8 8d f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1811 + printf(" --array-input-length Set the size of the array input file.\n"); + 401de3: bf d8 31 40 00 mov $0x4031d8,%edi + 401de8: e8 83 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1812 + printf(" --iterate Set the number of timing iterations to perform (default 1).\n"); + 401ded: bf 20 32 40 00 mov $0x403220,%edi + 401df2: e8 79 f2 ff ff call 401070 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 401df7: bf 80 32 40 00 mov $0x403280,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1816 +} + 401dfc: 5b pop %rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1814 + printf(" --size-param A parameter for size available as a language primitive which allows user to specify the size at runtime (default 1).\n"); + 401dfd: e9 6e f2 ff ff jmp 401070 + 401e02: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401e09: 00 00 00 00 + 401e0d: 0f 1f 00 nopl (%rax) + +0000000000401e10 : +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:99 +GibVector *generate_loop_398_533(GibVector *vec_166_578_634, + 401e10: 41 56 push %r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e12: 4c 8d 71 ff lea -0x1(%rcx),%r14 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:99 +GibVector *generate_loop_398_533(GibVector *vec_166_578_634, + 401e16: 41 55 push %r13 + 401e18: 49 89 d5 mov %rdx,%r13 + 401e1b: 41 54 push %r12 + 401e1d: 49 89 fc mov %rdi,%r12 + 401e20: 55 push %rbp + 401e21: 48 89 cd mov %rcx,%rbp + 401e24: 53 push %rbx + 401e25: 48 89 f3 mov %rsi,%rbx + 401e28: 48 83 ec 20 sub $0x20,%rsp +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e2c: 49 8b 3c 24 mov (%r12),%rdi + 401e30: 49 8b 54 24 10 mov 0x10(%r12),%rdx +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e35: 48 89 e8 mov %rbp,%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e38: 48 89 e6 mov %rsp,%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e3b: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e3e: 48 01 df add %rbx,%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e41: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401e45: 48 0f af fa imul %rdx,%rdi + 401e49: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e4e: e8 cd f2 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401e53: 48 8d 7b 01 lea 0x1(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401e57: 49 39 fd cmp %rdi,%r13 + 401e5a: 74 30 je 401e8c +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e5c: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401e61: 49 03 3c 24 add (%r12),%rdi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401e65: 4c 89 f0 mov %r14,%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e68: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e6d: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401e70: 48 0f af fa imul %rdx,%rdi + 401e74: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401e79: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401e7e: e8 9d f2 ff ff call 401120 + 401e83: 48 8d 7b 02 lea 0x2(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401e87: 49 39 fd cmp %rdi,%r13 + 401e8a: 75 14 jne 401ea0 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:118 +} + 401e8c: 48 83 c4 20 add $0x20,%rsp + 401e90: 4c 89 e0 mov %r12,%rax + 401e93: 5b pop %rbx + 401e94: 5d pop %rbp + 401e95: 41 5c pop %r12 + 401e97: 41 5d pop %r13 + 401e99: 41 5e pop %r14 + 401e9b: c3 ret + 401e9c: 0f 1f 40 00 nopl 0x0(%rax) +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ea0: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401ea5: 49 03 3c 24 add (%r12),%rdi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401ea9: 48 8d 45 fe lea -0x2(%rbp),%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ead: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401eb2: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401eb5: 48 0f af fa imul %rdx,%rdi + 401eb9: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401ebe: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ec3: e8 58 f2 ff ff call 401120 + 401ec8: 48 8d 7b 03 lea 0x3(%rbx),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401ecc: 49 39 fd cmp %rdi,%r13 + 401ecf: 74 bb je 401e8c +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ed1: 49 8b 54 24 10 mov 0x10(%r12),%rdx + 401ed6: 49 03 3c 24 add (%r12),%rdi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401eda: 48 8d 45 fd lea -0x3(%rbp),%rax +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ede: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_398_533(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + 401ee3: 48 29 d8 sub %rbx,%rax +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:112 + GibInt fltAppE_615_643 = idx_167_579_635 + 1; + 401ee6: 48 83 c3 04 add $0x4,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401eea: 48 0f af fa imul %rdx,%rdi + 401eee: 49 03 7c 24 18 add 0x18(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:108 + GibInt fltPrm_614_641 = n_6_581_637 - idx_167_579_635; + 401ef3: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401ef8: e8 23 f2 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + if (fltIf_613_638) { + 401efd: 49 39 dd cmp %rbx,%r13 + 401f00: 74 8a je 401e8c + 401f02: e9 25 ff ff ff jmp 401e2c +generate_loop_398_533.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:105 + 401f07: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) + 401f0e: 00 00 + +0000000000401f10 : +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:119 +GibVector *generate_loop_398_536(GibVector *vec_166_591_649, + 401f10: 41 55 push %r13 + 401f12: 49 89 d5 mov %rdx,%r13 + 401f15: 41 54 push %r12 + 401f17: 49 89 f4 mov %rsi,%r12 + 401f1a: 55 push %rbp + 401f1b: 48 89 fd mov %rdi,%rbp + 401f1e: 53 push %rbx + 401f1f: 48 89 cb mov %rcx,%rbx + 401f22: 48 83 ec 28 sub $0x28,%rsp +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f26: 48 8b 03 mov (%rbx),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401f29: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f2d: 48 89 e6 mov %rsp,%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f30: 48 8b 7d 00 mov 0x0(%rbp),%rdi + 401f34: 4c 01 e0 add %r12,%rax + 401f37: 48 0f af 43 10 imul 0x10(%rbx),%rax + 401f3c: 4c 01 e7 add %r12,%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401f3f: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f43: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401f47: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f4b: 48 0f af fa imul %rdx,%rdi + 401f4f: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401f53: 48 89 04 24 mov %rax,(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f57: e8 c4 f1 ff ff call 401120 + 401f5c: 49 8d 7c 24 01 lea 0x1(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401f61: 49 39 fd cmp %rdi,%r13 + 401f64: 74 40 je 401fa6 +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f66: 48 8b 03 mov (%rbx),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401f69: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f6d: 48 8d 74 24 08 lea 0x8(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401f72: 48 01 f8 add %rdi,%rax + 401f75: 48 0f af 43 10 imul 0x10(%rbx),%rax + 401f7a: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401f7e: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f82: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401f86: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401f8a: 48 0f af fa imul %rdx,%rdi + 401f8e: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401f92: 48 89 44 24 08 mov %rax,0x8(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401f97: e8 84 f1 ff ff call 401120 + 401f9c: 49 8d 7c 24 02 lea 0x2(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401fa1: 49 39 fd cmp %rdi,%r13 + 401fa4: 75 12 jne 401fb8 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:143 +} + 401fa6: 48 83 c4 28 add $0x28,%rsp + 401faa: 5b pop %rbx + 401fab: 5d pop %rbp + 401fac: 41 5c pop %r12 + 401fae: 41 5d pop %r13 + 401fb0: c3 ret + 401fb1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401fb8: 48 8b 03 mov (%rbx),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401fbb: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401fbf: 48 8d 74 24 10 lea 0x10(%rsp),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401fc4: 48 01 f8 add %rdi,%rax + 401fc7: 48 0f af 43 10 imul 0x10(%rbx),%rax + 401fcc: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 401fd0: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401fd4: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 401fd8: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 401fdc: 48 0f af fa imul %rdx,%rdi + 401fe0: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 401fe4: 48 89 44 24 10 mov %rax,0x10(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401fe9: e8 32 f1 ff ff call 401120 + 401fee: 49 8d 7c 24 03 lea 0x3(%r12),%rdi +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 401ff3: 49 39 fd cmp %rdi,%r13 + 401ff6: 74 ae je 401fa6 +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 401ff8: 48 8b 03 mov (%rbx),%rax +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:132 + GibInt fltAppE_618_656 = *tmp_0; + 401ffb: 48 8b 53 18 mov 0x18(%rbx),%rdx +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 401fff: 48 8d 74 24 18 lea 0x18(%rsp),%rsi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:137 + GibInt fltAppE_619_659 = idx_167_592_650 + 1; + 402004: 49 83 c4 04 add $0x4,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + return ((char*)vec->data + (vec->elt_size * (vec->lower + i))); + 402008: 48 01 f8 add %rdi,%rax + 40200b: 48 0f af 43 10 imul 0x10(%rbx),%rax +generate_loop_398_536.part.0.isra.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402010: 48 03 7d 00 add 0x0(%rbp),%rdi +add1(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + GibInt tailprim_667 = x_10_552_630 + 1; + 402014: 48 8b 04 02 mov (%rdx,%rax,1),%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402018: 48 8b 55 10 mov 0x10(%rbp),%rdx +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:85 + 40201c: 48 83 c0 01 add $0x1,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:577 + 402020: 48 0f af fa imul %rdx,%rdi + 402024: 48 03 7d 18 add 0x18(%rbp),%rdi +generate_loop_398_536(): +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:133 + GibInt fltPrm_617_657 = add1(fltAppE_618_656); + 402028: 48 89 44 24 18 mov %rax,0x18(%rsp) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:583 + memcpy(dst, elt, vec->elt_size); + 40202d: e8 ee f0 ff ff call 401120 +/local/scratch/a/singhav/gibbon/gibbon-compiler/examples/tail_recursion/MapOnVector.c:125 + if (fltIf_616_653) { + 402032: 4d 39 e5 cmp %r12,%r13 + 402035: 0f 84 6b ff ff ff je 401fa6 + 40203b: e9 e6 fe ff ff jmp 401f26 + +0000000000402040 : +gib_vector_alloc.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 402040: 41 54 push %r12 + 402042: 53 push %rbx + 402043: 48 89 fb mov %rdi,%rbx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402046: bf 20 00 00 00 mov $0x20,%edi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:512 +GibVector *gib_vector_alloc(GibInt num, size_t elt_size) + 40204b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40204f: e8 dc f0 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:515 + if (vec == NULL) { + 402054: 48 85 c0 test %rax,%rax + 402057: 74 3b je 402094 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:519 + void *data = (void *) gib_alloc(num * elt_size); + 402059: 48 8d 3c dd 00 00 00 lea 0x0(,%rbx,8),%rdi + 402060: 00 + 402061: 49 89 c4 mov %rax,%r12 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402064: e8 c7 f0 ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:520 + if (data == NULL) { + 402069: 48 85 c0 test %rax,%rax + 40206c: 74 48 je 4020b6 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:527 + vec->data = data; + 40206e: 49 89 44 24 18 mov %rax,0x18(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 402073: 4c 89 e0 mov %r12,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:524 + vec->lower = 0; + 402076: 49 c7 04 24 00 00 00 movq $0x0,(%r12) + 40207d: 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:525 + vec->upper = num; + 40207e: 49 89 5c 24 08 mov %rbx,0x8(%r12) +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:526 + vec->elt_size = elt_size; + 402083: 49 c7 44 24 10 08 00 movq $0x8,0x10(%r12) + 40208a: 00 00 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:529 +} + 40208c: 48 83 c4 08 add $0x8,%rsp + 402090: 5b pop %rbx + 402091: 41 5c pop %r12 + 402093: c3 ret +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:516 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(GibVector)); + 402094: 48 8b 3d 65 30 00 00 mov 0x3065(%rip),%rdi # 405100 + 40209b: ba 20 00 00 00 mov $0x20,%edx + 4020a0: be 18 33 40 00 mov $0x403318,%esi + 4020a5: 31 c0 xor %eax,%eax + 4020a7: e8 64 f0 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:517 + exit(1); + 4020ac: bf 01 00 00 00 mov $0x1,%edi + 4020b1: e8 ba f0 ff ff call 401170 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:521 + fprintf(stderr, "alloc_vector: gib_alloc failed: %zu", sizeof(num * elt_size)); + 4020b6: 48 8b 3d 43 30 00 00 mov 0x3043(%rip),%rdi # 405100 + 4020bd: ba 08 00 00 00 mov $0x8,%edx + 4020c2: be 18 33 40 00 mov $0x403318,%esi + 4020c7: e8 44 f0 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:522 + exit(1); + 4020cc: bf 01 00 00 00 mov $0x1,%edi + 4020d1: e8 9a f0 ff ff call 401170 + 4020d6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 4020dd: 00 00 00 + +00000000004020e0 : +check_args.part.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 4020e0: 55 push %rbp + 4020e1: 48 89 fd mov %rdi,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 4020e4: 48 8b 3d 15 30 00 00 mov 0x3015(%rip),%rdi # 405100 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1876 +void check_args(int i, int argc, char **argv, char *parameter){ + 4020eb: 48 89 f2 mov %rsi,%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1878 + fprintf(stderr, "Not enough arguments after %s, expected .\n", parameter); + 4020ee: 31 c0 xor %eax,%eax + 4020f0: be 40 33 40 00 mov $0x403340,%esi + 4020f5: e8 16 f0 ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1879 + gib_show_usage(argv); + 4020fa: 48 89 ef mov %rbp,%rdi + 4020fd: e8 4e fc ff ff call 401d50 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1880 + exit(1); + 402102: bf 01 00 00 00 mov $0x1,%edi + 402107: e8 64 f0 ff ff call 401170 + 40210c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000402110 : +gib_shadowstack_initialize.part.0.constprop.0(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1483 +static void gib_shadowstack_initialize(GibShadowstack* stack, size_t stack_size) + 402110: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1487 + fprintf(stderr, "gib_shadowstack_initialize: gib_alloc failed: %zu", + 402114: ba 00 00 00 06 mov $0x6000000,%edx + 402119: be 70 33 40 00 mov $0x403370,%esi + 40211e: 31 c0 xor %eax,%eax + 402120: 48 8b 3d d9 2f 00 00 mov 0x2fd9(%rip),%rdi # 405100 + 402127: e8 e4 ef ff ff call 401110 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1489 + exit(1); + 40212c: bf 01 00 00 00 mov $0x1,%edi + 402131: e8 3a f0 ff ff call 401170 + 402136: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40213d: 00 00 00 + +0000000000402140 : +gib_check_rust_struct_sizes(): +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:994 +{ + 402140: 55 push %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 402141: bf 38 00 00 00 mov $0x38,%edi + 402146: e8 e5 ef ff ff call 401130 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 40214b: 48 83 ec 08 sub $0x8,%rsp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:241 +void *gib_alloc(size_t n) { return malloc(n); } + 40214f: 48 89 c5 mov %rax,%rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:999 + nursery = (size_t *) ((char *) frame + sizeof(size_t)); + 402152: 48 8d 50 10 lea 0x10(%rax),%rdx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1000 + generation = (size_t *) ((char *) nursery + sizeof(size_t)); + 402156: 48 8d 48 18 lea 0x18(%rax),%rcx +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:998 + frame = (size_t *) ((char *) stack + sizeof(size_t)); + 40215a: 48 8d 70 08 lea 0x8(%rax),%rsi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1003 + gc_stats = (size_t *) ((char *) footer + sizeof(size_t)); + 40215e: 48 83 c0 30 add $0x30,%rax +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1004 + gib_get_rust_struct_sizes(stack, frame, nursery, generation, reg_info, footer, gc_stats); + 402162: 4c 8d 4d 28 lea 0x28(%rbp),%r9 + 402166: 48 89 ef mov %rbp,%rdi + 402169: 50 push %rax + 40216a: 4c 8d 45 20 lea 0x20(%rbp),%r8 + 40216e: e8 dd ef ff ff call 401150 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 + assert(*stack == sizeof(GibShadowstack)); + 402173: 48 83 7d 00 18 cmpq $0x18,0x0(%rbp) + 402178: 58 pop %rax + 402179: 5a pop %rdx + 40217a: 75 42 jne 4021be +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 + assert(*frame == sizeof(GibShadowstackFrame)); + 40217c: 48 83 7d 08 18 cmpq $0x18,0x8(%rbp) + 402181: 0f 85 cd 00 00 00 jne 402254 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 + assert(*nursery == sizeof(GibNursery)); + 402187: 48 83 7d 10 20 cmpq $0x20,0x10(%rbp) + 40218c: 0f 85 a9 00 00 00 jne 40223b +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 + assert(*generation == sizeof(GibOldgen)); + 402192: 48 83 7d 18 18 cmpq $0x18,0x18(%rbp) + 402197: 0f 85 85 00 00 00 jne 402222 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 + assert(*reg_info == sizeof(GibRegionInfo)); + 40219d: 48 83 7d 20 20 cmpq $0x20,0x20(%rbp) + 4021a2: 75 65 jne 402209 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 + assert(*footer == sizeof(GibOldgenChunkFooter)); + 4021a4: 48 83 7d 28 18 cmpq $0x18,0x28(%rbp) + 4021a9: 75 45 jne 4021f0 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 + assert(*gc_stats == sizeof(GibGcStats)); + 4021ab: 48 81 7d 30 f0 00 00 cmpq $0xf0,0x30(%rbp) + 4021b2: 00 + 4021b3: 75 22 jne 4021d7 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4021b5: 48 89 ef mov %rbp,%rdi +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1019 +} + 4021b8: 5d pop %rbp +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:242 +void gib_free(void *ptr) { free(ptr); } + 4021b9: e9 72 ee ff ff jmp 401030 +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1007 (discriminator 1) + assert(*stack == sizeof(GibShadowstack)); + 4021be: b9 60 37 40 00 mov $0x403760,%ecx + 4021c3: ba ef 03 00 00 mov $0x3ef,%edx + 4021c8: be a8 33 40 00 mov $0x4033a8,%esi + 4021cd: bf e8 33 40 00 mov $0x4033e8,%edi + 4021d2: e8 f9 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1013 (discriminator 1) + assert(*gc_stats == sizeof(GibGcStats)); + 4021d7: b9 60 37 40 00 mov $0x403760,%ecx + 4021dc: ba f5 03 00 00 mov $0x3f5,%edx + 4021e1: be a8 33 40 00 mov $0x4033a8,%esi + 4021e6: bf d0 34 40 00 mov $0x4034d0,%edi + 4021eb: e8 e0 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1012 (discriminator 1) + assert(*footer == sizeof(GibOldgenChunkFooter)); + 4021f0: b9 60 37 40 00 mov $0x403760,%ecx + 4021f5: ba f4 03 00 00 mov $0x3f4,%edx + 4021fa: be a8 33 40 00 mov $0x4033a8,%esi + 4021ff: bf a8 34 40 00 mov $0x4034a8,%edi + 402204: e8 c7 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1011 (discriminator 1) + assert(*reg_info == sizeof(GibRegionInfo)); + 402209: b9 60 37 40 00 mov $0x403760,%ecx + 40220e: ba f3 03 00 00 mov $0x3f3,%edx + 402213: be a8 33 40 00 mov $0x4033a8,%esi + 402218: bf 80 34 40 00 mov $0x403480,%edi + 40221d: e8 ae ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1010 (discriminator 1) + assert(*generation == sizeof(GibOldgen)); + 402222: b9 60 37 40 00 mov $0x403760,%ecx + 402227: ba f2 03 00 00 mov $0x3f2,%edx + 40222c: be a8 33 40 00 mov $0x4033a8,%esi + 402231: bf 58 34 40 00 mov $0x403458,%edi + 402236: e8 95 ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1009 (discriminator 1) + assert(*nursery == sizeof(GibNursery)); + 40223b: b9 60 37 40 00 mov $0x403760,%ecx + 402240: ba f1 03 00 00 mov $0x3f1,%edx + 402245: be a8 33 40 00 mov $0x4033a8,%esi + 40224a: bf 38 34 40 00 mov $0x403438,%edi + 40224f: e8 7c ee ff ff call 4010d0 <__assert_fail@plt> +/local/scratch/a/singhav/gibbon/gibbon-rts/rts-c/gibbon_rts.c:1008 (discriminator 1) + assert(*frame == sizeof(GibShadowstackFrame)); + 402254: b9 60 37 40 00 mov $0x403760,%ecx + 402259: ba f0 03 00 00 mov $0x3f0,%edx + 40225e: be a8 33 40 00 mov $0x4033a8,%esi + 402263: bf 10 34 40 00 mov $0x403410,%edi + 402268: e8 63 ee ff ff call 4010d0 <__assert_fail@plt> + +Disassembly of section .fini: + +0000000000402270 <_fini>: +_fini(): + 402270: f3 0f 1e fa endbr64 + 402274: 48 83 ec 08 sub $0x8,%rsp + 402278: 48 83 c4 08 add $0x8,%rsp + 40227c: c3 ret diff --git a/microbench/tail_recursion/MonoTree.c b/microbench/tail_recursion/MonoTree.c new file mode 100644 index 000000000..ee066878b --- /dev/null +++ b/microbench/tail_recursion/MonoTree.c @@ -0,0 +1,2392 @@ +#pragma GCC optimize("O3", "inline") +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// #include +#ifdef _WIN64 +#include +#endif +#include +#include +#include // For va_start etc +#include +#include +#include +#include +#ifdef _POINTER +#include +#endif +#ifdef _PARALLEL +#include +#include +#endif + +#define KB 1024lu +#define MB (KB * 1000lu) +#define GB (MB * 1000lu) + +#define REDIRECTION_TAG 255 +#define INDIRECTION_TAG 254 + +#define stack_size 10000000 + +// Initial size of BigInfinite buffers +static long long global_init_biginf_buf_size = (4 * GB); + +// Initial size of Infinite buffers +static long long global_init_inf_buf_size = 1 * KB; + +// Maximum size of a chunk, see GitHub #110. +static long long global_inf_buf_max_chunk_size = 1 * GB; + +static long long global_size_param = 1; +static long long global_iters_param = 1; + +static char* global_benchfile_param = NULL; +static char* global_arrayfile_param = NULL; +// Number of lines in the arrayfile +static long long global_arrayfile_length_param = -1; + +// Sequential for now: +static const int num_workers = 1; + +// Count the number of regions allocated. +static long long global_region_count = 0; +static bool global_region_count_flag = false; + +#ifdef _PARALLEL +static inline void bump_global_region_count() { + __atomic_add_fetch(&global_region_count, 1, __ATOMIC_SEQ_CST); + return; +} +#else +static inline void bump_global_region_count() { + global_region_count++; + return; +} +#endif + +static inline void print_global_region_count() { + printf("REGION_COUNT: %lld\n", global_region_count); + return; +} + +#define REDIRECTION_NODE_SIZE 9 +#define MAX(a,b) (((a)>(b))?(a):(b)) +#define MIN(a,b) (((a)<(b))?(a):(b)) + +// https://www.cprogramming.com/snippets/source-code/find-the-number-of-cpu-cores-for-windows-mac-or-linux +static int get_num_processors() { +#ifdef _WIN64 + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +#else + return sysconf(_SC_NPROCESSORS_ONLN); +#endif +} + +// Requires -std=gnu11 +int dbgprintf(const char *format, ...) { + int code = 0; + va_list args; + va_start(args, format); +#ifdef _DEBUG + code = vprintf(format, args); +#endif + va_end(args); + return code; +} + + +// ----------------------------------------------------------------------------- +// Allocators +// ----------------------------------------------------------------------------- + + +// ------------------------------------- +// Bump allocation for linked-lists +// ------------------------------------- + + +#ifdef _BUMPALLOC +// #define _DEBUG +#warning "Using bump allocator." + +__thread char* bumpalloc_heap_ptr = (char*)NULL; +__thread char* bumpalloc_heap_ptr_end = (char*)NULL; + +char* saved_heap_ptr_stack[100]; +int num_saved_heap_ptr = 0; + +// For simplicity just use a single large slab: +static inline void INITBUMPALLOC() { + bumpalloc_heap_ptr = (char*)malloc(global_init_biginf_buf_size); + bumpalloc_heap_ptr_end = bumpalloc_heap_ptr + global_init_biginf_buf_size; +#ifdef _DEBUG + printf("Arena size for bump alloc: %lld\n", global_init_biginf_buf_size); + printf("BUMPALLOC/INITBUMPALLOC DONE: heap_ptr = %p\n", bumpalloc_heap_ptr); +#endif +} + +static inline void* BUMPALLOC(long long n) { + if (! bumpalloc_heap_ptr) { + INITBUMPALLOC(); + } + if (bumpalloc_heap_ptr + n < bumpalloc_heap_ptr_end) { + char* old= bumpalloc_heap_ptr; + bumpalloc_heap_ptr += n; + return old; + } else { + fprintf(stderr, "Warning: bump allocator ran out of memory."); + exit(1); + } +} + +// Snapshot the current heap pointer value across all threads. +void save_alloc_state() { + dbgprintf("Saving(%p): pos %d", heap_ptr, num_saved_heap_ptr); + saved_heap_ptr_stack[num_saved_heap_ptr] = heap_ptr; + num_saved_heap_ptr++; + dbgprintf("\n"); +} + +void restore_alloc_state() { + if(num_saved_heap_ptr <= 0) { + fprintf(stderr, "Bad call to restore_alloc_state! Saved stack empty!\ne"); + exit(1); + } + num_saved_heap_ptr--; + dbgprintf("Restoring(%p): pos %d, discarding %p", + saved_heap_ptr_stack[num_saved_heap_ptr], num_saved_heap_ptr, bumpalloc_heap_ptr); + bumpalloc_heap_ptr = saved_heap_ptr_stack[num_saved_heap_ptr]; +} + + +#else +// Regular malloc mode: +void INITBUMPALLOC() {} +void save_alloc_state() {} +void restore_alloc_state() {} + +#define BUMPALLOC(n) malloc(n) + +#endif // BUMPALLOC + + +// ------------------------------------- +// ALLOC and ALLOC_PACKED macros +// ------------------------------------- + + +/* + +If parallelism is enabled, we always use a malloc based allocator +since Boehm GC is not thread-safe in its default configuration. It can be +made thread-safe by building it with appropriate flags, but we don't do that. +Presently, all parallel pointer-based programs will leak memory. + +*/ + +#ifdef _PARALLEL +#define ALLOC(n) malloc(n) +#define ALLOC_PACKED_BIG(n) malloc(n) +char *ALLOC_COUNTED(size_t size) { + bump_global_region_count(); + return ALLOC(size); +} +#else + #ifdef _POINTER +#define ALLOC(n) GC_MALLOC(n) +#define ALLOC_PACKED_BIG(n) GC_MALLOC(n) +char *ALLOC_COUNTED(size_t size) { + bump_global_region_count(); + return GC_MALLOC(size); +} + #else +#define ALLOC(n) malloc(n) +#define ALLOC_PACKED_BIG(n) malloc(n) +char *ALLOC_COUNTED(size_t size) { + bump_global_region_count(); + return ALLOC(size); +} + #endif // _POINTER +#endif // _PARALLEL + + +// Could try alloca() here. Better yet, we could keep our own, +// separate stack and insert our own code to restore the pointer +// before any function that (may have) called ALLOC_SCOPED returns. + +// #define ALLOC_SCOPED() alloca(1024) +#define ALLOC_SCOPED(n) alloca(n) +// #define ALLOC_SCOPED() alloc_scoped() + +// Stack allocation is either too small or blows our stack. +// We need a way to make a giant stack if we want to use alloca. +// #define ALLOC_SCOPED() ALLOC(global_init_biginf_buf_size) + +// Our global pointer. No parallelism. +// static char* stack_scoped_region; +// char* alloc_scoped() { return stack_scoped_region; } + + + +// ------------------------------------- +// Basic types +// ------------------------------------- + +// Must be consistent with sizeOfTy defined in Gibbon.Language.Syntax. + +typedef unsigned char TagTyPacked; +typedef unsigned char TagTyBoxed; +typedef long long IntTy; +typedef char CharTy; +typedef float FloatTy; +typedef unsigned long long SymTy; +typedef bool BoolTy; +typedef char* PtrTy; +typedef char* CursorTy; + +// ------------------------------------- +// Arenas and dictionaries +// ------------------------------------- + +typedef struct mem_arena { + int ind; + char* mem; // TODO(vollmerm): make this a list of chunks? + void* reflist; +} mem_arena_t; + +typedef mem_arena_t* ArenaTy; + +ArenaTy alloc_arena() { + ArenaTy ar = ALLOC(sizeof(mem_arena_t)); + ar->ind = 0; + ar->mem = malloc(global_inf_buf_max_chunk_size); + ar->reflist = 0; + return ar; +} + +void free_arena(ArenaTy ar) { + free(ar->mem); + // TODO(vollmerm): free everything in ar->reflist + free(ar); +} + +CursorTy extend_arena(ArenaTy ar, int size) { + CursorTy ret = ar->mem + ar->ind; + ar->ind += size; + return ret; +} + +typedef struct dict_item { + struct dict_item * next; + int key; + void * ptrval; +} dict_item_t; + +dict_item_t * dict_alloc(ArenaTy ar) { + return (dict_item_t *) extend_arena(ar, sizeof(dict_item_t)); // ALLOC(sizeof(dict_item_t)); +} + +dict_item_t *dict_insert_ptr(ArenaTy ar, dict_item_t *ptr, SymTy key, PtrTy val) { + dict_item_t *ret = dict_alloc(ar); + ret->key = key; + ret->ptrval = val; + ret->next = ptr; + return ret; +} + +PtrTy dict_lookup_ptr(dict_item_t *ptr, SymTy key) { + while (ptr != 0) { + if (ptr->key == key) { + return ptr->ptrval; + } else { + ptr = ptr->next; + } + } + printf("Error, key %lld not found!\n",key); + exit(1); +} + +// ------------------------------------- +// Sets +// ------------------------------------- + + +struct set_elem { + int val; + UT_hash_handle hh; +}; + +typedef struct set_elem* SymSetTy; + +SymSetTy empty_set() { + return NULL; +} + +SymSetTy insert_set(SymSetTy set, int sym) { + SymSetTy s; + HASH_FIND_INT(set, &sym, s); /* sym already in the hash? */ + if (s==NULL) { + s = malloc(sizeof(struct set_elem)); + s->val = sym; + HASH_ADD_INT(set,val,s); + } + return set; +} + +BoolTy contains_set(SymSetTy set, int sym) { + SymSetTy s; + HASH_FIND_INT(set, &sym, s); + return (s!=NULL); +} + +// ------------------------------------- +// Sym Hash +// ------------------------------------- + +struct sym_hash_elem { + int key; + int val; + UT_hash_handle hh; +}; + +typedef struct sym_hash_elem* SymHashTy; + +typedef struct sym_hash_elem* IntHashTy; + +SymHashTy empty_hash() { + return NULL; +} + +SymHashTy insert_hash(SymHashTy hash, int k, int v) { + SymHashTy s; + // NOTE: not checking for duplicates! + // s = malloc(sizeof(struct sym_hash_elem)); + s = ALLOC(sizeof(struct sym_hash_elem)); + s->val = v; + s->key = k; + HASH_ADD_INT(hash,key,s); + + return hash; +} + +IntTy lookup_hash(SymHashTy hash, int k) { + SymHashTy s; + HASH_FIND_INT(hash,&k,s); + if (s==NULL) { + return k; // NOTE: return original key if val not found + // TODO(vollmerm): come up with something better to do here + } else { + return s->val; + } +} + +BoolTy contains_hash(SymHashTy hash, int sym) { + SymHashTy s; + HASH_FIND_INT(hash,&sym,s); + return (s!=NULL); +} + +// ------------------------------------- +// Helpers +// ------------------------------------- + +char* read_benchfile_param() { + if (global_benchfile_param == NULL) { + fprintf(stderr, "read_benchfile_param: benchmark input file was not set! Set using --bench-input.\n"); + exit(1); + } else + return global_benchfile_param; +} + +char* read_arrayfile_param() { + if (global_arrayfile_param == NULL) { + fprintf(stderr, "read_arrayfile_param: array input file was not set! Set using --array-input.\n"); + exit(1); + } else + return global_arrayfile_param; +} + +IntTy read_arrayfile_length_param() { + if (global_arrayfile_length_param == -1) { + fprintf(stderr, "read_arrayfile_length_param: array input file length was not set! Set using --array-input-length.\n"); + exit(1); + } else + return global_arrayfile_length_param; +} + + +// fun fact: __ prefix is actually reserved and this is an undefined behavior. +// These functions must be provided by the code generator. +int __main_expr(); + + +void show_usage(char** argv) +{ + printf("\n"); + printf("This binary was generated by the Gibbon compiler.\n"); + printf("\n"); + printf("Usage: %s [OPTS] [size] [iters]\n", argv[0]); + + printf("\n"); + printf("Options:\n"); + printf(" --buffer-size Set the buffer size (default %lld).\n", global_init_biginf_buf_size); + printf(" --bench-input Set the input file read for benchmarking. Applies only\n"); + printf(" IF the program was *compiled* with --bench-fun. \n"); + return; +} + +double avg(const double* arr, int n) +{ + double sum = 0.0; + for(int i=0; itv_sec - t0->tv_sec) + + ((double)(t1->tv_nsec - t0->tv_nsec) / 1000000000.0); +} + +int compare_doubles(const void *a, const void *b) +{ + const double *da = (const double *) a; + const double *db = (const double *) b; + return (*da > *db) - (*da < *db); +} + +// Exponentiation +IntTy expll(IntTy base, IntTy pow) { + if (base == 2) { + return (1 << pow); + } else { + IntTy i, result = 1; + for (i = 0; i < pow; i++) + result *= base; + return result; + } + } + +// ------------------------------------- +// Symbol table +// ------------------------------------- + +#define global_max_symbol_len 256 + +// Invariant: should always be equal to max(sym_table_keys) +static SymTy global_gensym_counter = 0; + +// Its value is updated by the flags parser. +static char *global_bench_prog_param; + +static SymTy newline_symbol = -1; +static SymTy space_symbol = -1; +static SymTy comma_symbol = -1; +static SymTy leftparen_symbol = -1; +static SymTy rightparen_symbol = -1; + +typedef struct SymTable_elem { + SymTy idx; /* key */ + char value[global_max_symbol_len]; + UT_hash_handle hh; /* makes this structure hashable */ +} SymTable_elem; + +// important! initialize to NULL +SymTable_elem *global_sym_table = NULL; + +void add_symbol(SymTy idx, char *value) { + struct SymTable_elem *s; + s = ALLOC(sizeof(struct SymTable_elem)); + s->idx = idx; + strcpy(s->value, value); + HASH_ADD(hh, global_sym_table, idx, sizeof(IntTy), s); + if (idx > global_gensym_counter) { + global_gensym_counter = idx; + } +} + +void set_newline(SymTy idx) { + newline_symbol = idx; + add_symbol(idx,"NEWLINE"); +} + +void set_space(SymTy idx) { + space_symbol = idx; + add_symbol(idx,"SPACE"); +} + +void set_comma(SymTy idx) { + comma_symbol = idx; + add_symbol(idx,"COMMA"); +} + +void set_leftparen(SymTy idx) { + leftparen_symbol = idx; + add_symbol(idx,"LEFTPAREN"); +} + +void set_rightparen(SymTy idx) { + rightparen_symbol = idx; + add_symbol(idx,"RIGHTPAREN"); +} + +IntTy print_symbol(SymTy idx) { + if (idx == comma_symbol) { + return printf(","); + } else if (idx == newline_symbol) { + return printf("\n"); + } else if (idx == space_symbol) { + return printf(" "); + } else if (idx == leftparen_symbol) { + return printf("("); + } else if (idx == rightparen_symbol) { + return printf(")"); + } else { + struct SymTable_elem *s; + HASH_FIND(hh, global_sym_table, &idx, sizeof(SymTy), s); + if (s == NULL) { + return printf("%lld", idx); + } else { + return printf("%s", s->value); + } + + } +} + +#ifdef _PARALLEL +SymTy gensym() { + SymTy idx = __atomic_add_fetch(&global_gensym_counter, 1, __ATOMIC_SEQ_CST); + return idx; +} +#else +SymTy gensym() { + global_gensym_counter += 1; + SymTy idx = global_gensym_counter; + return idx; +} +#endif + +void free_symtable() { + struct SymTable_elem *elt, *tmp; + HASH_ITER(hh, global_sym_table, elt, tmp) { + HASH_DEL(global_sym_table,elt); + } + free(elt); + free(tmp); +} + +/* + +---------------------------------------- +Garbage collection +---------------------------------------- + + Gibbon has "growing regions" i.e each logical region is backed by a doubly linked-list + of smaller chunks which grows as required. In addition to actual data, each chunk + stores some additional metadata (RegionFooter) to chain the chunks together in a list + and for garbage collection. The footer: + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + serialized data | rf_reg_metadata_ptr | rf_seq_no | rf_size | rf_next | rf_prev + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + The metadata after the serialized data serves various purposes: + + - rf_reg_metadata_ptr: A pointer to a RegionTy struct that contains various metadata. + Of particular interest to us are the fields: + + = reg_id: A unique identifier for a region. + + = refcount and outset: Whenever an inter-region indirection is created, we record that information + using these two fields. Suppose we have an indirection from region A that points to some chunk + in region B. Then A's outset will store a pointer to that chunk's footer, and B's refcount will + be bumped by 1. Note that all there's only 1 refcount cell, and 1 outset per logical region, + and chunks only store a pointer to them. + + - rf_seq_no: The index of this particular chunk in the list. + + - rf_size: Used during bounds checking to calculate the size of the next region in + the linked list. + + - rf_next / rf_prev: Point to the next and previous chunk respectively. + + +There are two ways in which a region may be freed: + +(1) Whenever it goes out of scope + + The RTS tries to free a region whenever it goes out of scope. But this doesn't always succeed as + regions sometimes contain values that "escape". One reason why this'll happen is if there's an + indirection from A->B, and A lives longer than B. + In such a case, when B goes out of scope it's refcount won't be 0, and the RTS won't free it. + This brings us to (2). + +(2) + + When the RTS successfully frees a region, it decrements the refcounts of all the regions it + points to (via the outset). At the same time, if it encounters a region in the outset whoose + refcount becomes 0 after the decrement, it calls free_region on that. This way we can be sure + that all regions will eventually be garbage collected before the program exits. + + + +Why is it a doubly linked-list? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Due to way that bounds-checking works, the pointers in the outset may actually point to any +arbitrary chunk in the chain. However, we must call free_region on the first one to ensure that +all of them are GC'd. So we need pointers to traverse backward get to the first one. +'trav_to_first_chunk' accomplishes this. + + */ + +#define MAX_OUTSET_LENGTH 10 + +typedef struct RegionTy_struct { + SymTy reg_id; + uint reg_refcount; + CursorTy reg_heap; + uint reg_outset_len; + CursorTy reg_outset[MAX_OUTSET_LENGTH]; +} RegionTy; + +typedef struct RegionFooter_struct { + RegionTy *rf_reg_metadata_ptr; + + IntTy rf_seq_no; + IntTy rf_size; + struct RegionFooter_struct *rf_next; + struct RegionFooter_struct *rf_prev; +} RegionFooter; + +typedef struct ChunkTy_struct { + CursorTy chunk_start; + CursorTy chunk_end; +} ChunkTy; + +static inline void insert_into_outset(CursorTy ptr, RegionTy *reg) { + uint outset_len = reg->reg_outset_len; + // Check for duplicates. + for (uint i = 0; i < outset_len; i++) { + if (ptr == reg->reg_outset[i]) { + return; + } + } + // Otherwise, insert into the outset. + reg->reg_outset[outset_len] = ptr; + reg->reg_outset_len = outset_len + 1; + return; +} + +static inline void remove_from_outset(CursorTy ptr, RegionTy *reg) { + uint outset_len = reg->reg_outset_len; + CursorTy *outset = reg->reg_outset; + int i; + if (outset_len == 0) { + fprintf(stderr, "remove_from_outset: empty outset\n"); + exit(1); + } + // Position of 'ptr' in the outset. + int elt_idx = -1; + for (i = 0; i < outset_len; i++) { + if (ptr == outset[i]) { + elt_idx = i; + } + } + if (elt_idx == -1) { + fprintf(stderr, "remove_from_outset: element not found\n"); + exit(1); + } + // Move all elements ahead of 'elt_idx' back by one position. + for (i = elt_idx; i < outset_len; i++) { + outset[i] = outset[i+1]; + } + return; +} + +RegionTy *alloc_region(IntTy size) { + // Allocate the region metadata. + RegionTy *reg = ALLOC(sizeof(RegionTy)); + if (reg == NULL) { + printf("alloc_region: allocation failed: %ld", sizeof(RegionTy)); + exit(1); + } + + // Allocate the first chunk. + IntTy total_size = size + sizeof(RegionFooter); + CursorTy heap = ALLOC_PACKED_BIG(total_size); + if (heap == NULL) { + printf("alloc_region: malloc failed: %lld", total_size); + exit(1); + } + // Not heap+total_size, since we must keep space for the footer. + CursorTy heap_end = heap + size; + + // Initialize metadata fields. + reg->reg_id = gensym(); + reg->reg_refcount = 1; + reg->reg_heap = heap; + reg->reg_outset_len = 0; + +#ifdef _DEBUG + printf("Allocated a region(%lld): %lld bytes.\n", reg->reg_id, size); +#endif + + // Write the footer. + RegionFooter *footer = (RegionFooter *) heap_end; + footer->rf_reg_metadata_ptr = reg; + footer->rf_seq_no = 1; + footer->rf_size = size; + footer->rf_next = NULL; + footer->rf_prev = NULL; + + return reg; +} + +RegionTy *alloc_counted_region(IntTy size) { + // Bump the count. + bump_global_region_count(); + return alloc_region(size); +} + +ChunkTy alloc_chunk(CursorTy end_old_chunk) { + // Get size from current footer. + RegionFooter *footer = (RegionFooter *) end_old_chunk; + IntTy newsize = footer->rf_size * 2; + // See #110. + if (newsize > global_inf_buf_max_chunk_size) { + newsize = global_inf_buf_max_chunk_size; + } + IntTy total_size = newsize + sizeof(RegionFooter); + + // Allocate. + CursorTy start = ALLOC_PACKED_BIG(total_size); + if (start == NULL) { + printf("alloc_chunk: malloc failed: %lld", total_size); + exit(1); + } + CursorTy end = start + newsize; + + // Link the next chunk's footer. + footer->rf_next = (RegionFooter *) end; + + // Write the footer. + RegionFooter* new_footer = (RegionFooter *) end; + new_footer->rf_reg_metadata_ptr = footer->rf_reg_metadata_ptr; + new_footer->rf_seq_no = footer->rf_seq_no + 1; + new_footer->rf_size = newsize; + new_footer->rf_next = NULL; + new_footer->rf_prev = footer; + +#ifdef _DEBUG + RegionTy *reg = (RegionTy*) new_footer->rf_reg_metadata_ptr; + printf("alloc_chunk: allocated %lld bytes for region %lld.\n", total_size, reg->reg_id); +#endif + + return (ChunkTy) {start , end}; +} + +RegionFooter* trav_to_first_chunk(RegionFooter *footer) { + if (footer->rf_seq_no == 1) { + return footer; + } else if (footer->rf_prev == NULL) { + fprintf(stderr, "No previous chunk found at rf_seq_no: %lld", footer->rf_seq_no); + return NULL; + } else { + trav_to_first_chunk((RegionFooter *) footer->rf_prev); + } + return NULL; +} + +uint get_ref_count(CursorTy end_ptr) { + RegionFooter *footer = (RegionFooter *) end_ptr; + RegionTy *reg = (RegionTy *) footer->rf_reg_metadata_ptr; + return reg->reg_refcount; +} + +// B is the pointer, and A is the pointee (i.e B -> A). +// Bump A's refcount and update B's outset. +static inline void bump_ref_count(CursorTy end_b, CursorTy end_a) { + // Grab footers. + RegionFooter *footer_a = (RegionFooter *) end_a; + RegionFooter *footer_b = (RegionFooter *) end_b; + + // Grab metadata. + RegionTy *reg_a = (RegionTy *) footer_a->rf_reg_metadata_ptr; + RegionTy *reg_b = (RegionTy *) footer_b->rf_reg_metadata_ptr; + + // Bump A's refcount. + uint current_refcount, new_refcount; + current_refcount = reg_a->reg_refcount; + new_refcount = current_refcount + 1; + reg_a->reg_refcount = new_refcount; + +#ifdef _DEBUG + printf("bump_ref_count: %lld -> %lld\n", reg_b->reg_id, reg_a->reg_id); + printf("bump_ref_count: old-refcount=%d, old-outset-len=%d:\n", current_refcount, reg_b->reg_outset_len); + assert(current_refcount == reg_b->reg_outset_len+1); +#endif + + // Add A to B's outset. + insert_into_outset(end_a, reg_b); + +#ifdef _DEBUG + // printf("bump_ref_count: Added %p to %lld's outset, %p.\n", end_a, reg_b->reg_id, reg_b); + printf("bump_ref_count: new-refcount=%d, new-outset-len=%d\n", new_refcount, reg_b->reg_outset_len); + assert(new_refcount == reg_b->reg_outset_len+1); +#endif + + return; +} + +void free_region(CursorTy end_reg) { + // Grab footer and the metadata. + RegionFooter *footer = (RegionFooter *) end_reg; + RegionTy *reg = (RegionTy *) footer->rf_reg_metadata_ptr; + + // + RegionFooter *first_chunk_footer, *next_chunk_footer; + CursorTy first_chunk, next_chunk; + + // Decrement current reference count. + uint current_refcount, new_refcount; + current_refcount = reg->reg_refcount; + new_refcount = 0; + if (current_refcount != 0) { + new_refcount = current_refcount - 1; + reg->reg_refcount = new_refcount; + } + +#ifdef _DEBUG + printf("free_region(%lld): refcounts (1): old-refcount=%d, new-refcount=%d:\n", reg->reg_id, current_refcount, new_refcount); +#endif + + + // Free this region recount is 0. + if (new_refcount == 0) { + +#ifdef _DEBUG + printf("free_region(%lld): outset length: %d\n", reg->reg_id, reg->reg_outset_len); +#endif + + // Decrement refcounts, free regions with refcount==0 and also free + // elements of the outset. + if (reg->reg_outset_len != 0) { + uint outset_len = reg->reg_outset_len; + CursorTy *outset = reg->reg_outset; + RegionFooter *elt_footer; + RegionTy *elt_reg; + uint elt_current_refcount, elt_new_refcount; + CursorTy to_be_removed[MAX_OUTSET_LENGTH]; + uint to_be_removed_idx = 0; + for (int i = 0; i < outset_len; i++) { + elt_footer = (RegionFooter *) outset[i]; + elt_reg = (RegionTy *) elt_footer->rf_reg_metadata_ptr; +#ifdef _DEBUG + elt_current_refcount = elt_reg->reg_refcount; +#endif + elt_new_refcount = elt_current_refcount - 1; + elt_reg->reg_refcount = elt_new_refcount; +#ifdef _DEBUG + printf("free_region(%lld): old-refcount=%d, new-refcount=%d:\n", + elt_reg->reg_id, elt_current_refcount, elt_reg->reg_refcount); +#endif + if (elt_new_refcount == 0) { + // See [Why is it a doubly linked-list?] above + first_chunk_footer = trav_to_first_chunk(elt_footer); + if (first_chunk_footer != NULL) { + free_region((CursorTy) first_chunk_footer); + } + } + to_be_removed[to_be_removed_idx] = outset[i]; + to_be_removed_idx++; + } + // Remove elements from the outset. + for (uint i = 0; i < to_be_removed_idx; i++) { + remove_from_outset(to_be_removed[i], reg); + } + } + + +#ifdef _DEBUG + // Bookkeeping + IntTy num_freed_chunks = 0, total_bytesize = 0; +#endif + + // Free the chunks in this region. + first_chunk = end_reg - footer->rf_size; + first_chunk_footer = footer; + next_chunk = (char*) footer->rf_next; + +#ifdef _DEBUG + printf("free_region(%lld)\n", reg->reg_id); +#endif + +#ifdef _DEBUG + num_freed_chunks++; + total_bytesize = total_bytesize + first_chunk_footer->rf_size; +#endif + free(first_chunk); + + while (next_chunk != NULL) { + next_chunk_footer = (RegionFooter *) next_chunk; + #ifdef _DEBUG + num_freed_chunks++; + total_bytesize = total_bytesize + next_chunk_footer->rf_size; + #endif + free(next_chunk - next_chunk_footer->rf_size); + next_chunk = (char*) next_chunk_footer->rf_next; + } + +#ifdef _DEBUG + printf("free_region(%lld): Freed %lld bytes across %lld chunks.\n", + reg->reg_id, total_bytesize, num_freed_chunks); +#endif + + // Free the metadata. + free(reg); + + } else { +#ifdef _DEBUG + printf("free_region(%lld): non-zero refcount: %d.\n", + reg->reg_id, reg->reg_refcount); +#endif + } +} + +// Assume that all nodes with size information have tags >= 150. +BoolTy is_big(IntTy i, CursorTy cur) { + TagTyPacked tag = *(TagTyPacked *) cur; + if (tag >= 150) { + cur += 1; + IntTy size = *(IntTy *) cur; + if (size >= i) { + return true; + } else { + return false; + } + } + return false; +} + +// ------------------------------------- +// Vectors +// ------------------------------------- + +typedef struct VectorTy_struct { + // Bounds on the vector. + IntTy vec_lower, vec_upper; + + // Size of each element. + IntTy vec_elt_size; + + // Actual elements of the vector. + void* vec_data; +} VectorTy; + +VectorTy* vector_alloc(IntTy num, IntTy elt_size) { + VectorTy *vec = ALLOC(sizeof(VectorTy)); + if (vec == NULL) { + printf("alloc_vector: malloc failed: %ld", sizeof(VectorTy)); + exit(1); + } + void* data = ALLOC(num * elt_size); + if (data == NULL) { + printf("alloc_vector: malloc failed: %ld", sizeof(num * elt_size)); + exit(1); + } + vec->vec_lower = 0; + vec->vec_upper = num; + vec->vec_elt_size = elt_size; + vec->vec_data = data; + return vec; +} + +IntTy vector_length(VectorTy *vec) { + return (vec->vec_upper - vec->vec_lower); +} + +BoolTy vector_is_empty(VectorTy *vec) { + return (vector_length(vec) == 0); +} + +VectorTy* vector_slice(IntTy i, IntTy n, VectorTy *vec) { + IntTy lower = vec->vec_lower + i; + IntTy upper = vec->vec_lower + i + n; + if ((lower > vec->vec_upper)) { + printf("vector_slice: lower out of bounds, %lld > %lld", lower, vec->vec_upper); + exit(1); + } + if ((upper > vec->vec_upper)) { + printf("vector_slice: upper out of bounds: %lld > %lld", upper, vec->vec_upper); + exit(1); + } + VectorTy *vec2 = ALLOC(sizeof(VectorTy)); + if (vec == NULL) { + printf("vector_slice: malloc failed: %ld", sizeof(VectorTy)); + exit(1); + } + vec2->vec_lower = lower; + vec2->vec_upper = upper; + vec2->vec_elt_size = vec->vec_elt_size; + vec2->vec_data = vec->vec_data; + return vec2; +} + +// The callers must cast the return value. +static inline void* vector_nth(VectorTy *vec, IntTy i) { + // if (i < vec->lower || i > vec->upper) { + // printf("vector_nth index out of bounds: %lld (%lld,%lld) \n", i, vec->vec_lower, vec->vec_upper); + // exit(1); + // } + return (vec->vec_data + (vec->vec_elt_size * (vec->vec_lower + i))); +} + +static inline VectorTy* vector_inplace_update(VectorTy *vec, IntTy i, void* elt) { + void* dst = vector_nth(vec, i); + memcpy(dst, elt, vec->vec_elt_size); + return vec; +} + +static inline VectorTy* vector_copy(VectorTy *vec) { + IntTy len = vector_length(vec); + void *start = vector_nth(vec, 0); + VectorTy *vec2 = vector_alloc(len, vec->vec_elt_size); + memcpy(vec2->vec_data, start, len * vec->vec_elt_size); + return vec2; +} + +static inline VectorTy* vector_inplace_sort(VectorTy *vec, int (*compar)(const void *, const void*)) { + void *start = vector_nth(vec, 0); + qsort(start, vector_length(vec), vec->vec_elt_size, compar); + return vec; +} + +static inline VectorTy* vector_sort(VectorTy *vec, int (*compar)(const void *, const void*)) { + VectorTy *vec2 = vector_copy(vec); + vector_inplace_sort(vec2, compar); + return vec2; +} + +static inline VectorTy* vector_concat(VectorTy *vec) { + // Length of the input vector. + IntTy len = vector_length(vec); + // Length of the concatenated vector. + IntTy result_len = 0; + // Size of each element in the concatenated vector. + IntTy result_elt_size = 0; + VectorTy **elt_ref, *elt; + for (IntTy i = 0; i < len; i++) { + elt_ref = vector_nth(vec, i); + elt = *elt_ref; + result_elt_size = elt->vec_elt_size; + result_len += vector_length(elt); + } + + // Concatenated vector. + VectorTy *result = vector_alloc(result_len, result_elt_size); + IntTy elt_len; + // A counter that tracks the index of elements in 'result'. + IntTy k = 0; + for (IntTy i = 0; i < len; i++) { + elt_ref = vector_nth(vec, i); + elt = *elt_ref; + elt_len = vector_length(elt); + + for (IntTy j = 0; j < elt_len; j++) { + void* k_elt = vector_nth(elt, j); + vector_inplace_update(result, k, k_elt); + k++; + } + } + + return result; +} + +static inline void vector_free(VectorTy *vec) { + free(vec->vec_data); + free(vec); + return; +} + +static inline VectorTy* vector_merge(VectorTy *vec1, VectorTy *vec2) { + if (vec1->vec_upper != vec2->vec_lower) { + printf("vector_merge: non-contiguous slices, (%lld,%lld), (%lld,%lld).", + vec1->vec_lower, vec1->vec_upper, vec2->vec_lower, vec2->vec_upper); + exit(1); + } + VectorTy *merged = ALLOC(sizeof(VectorTy)); + if (merged == NULL) { + printf("vector_merge: malloc failed: %ld", sizeof(VectorTy)); + exit(1); + } + merged->vec_lower = vec1->vec_lower; + merged->vec_upper = vec2->vec_upper; + merged->vec_elt_size = vec1->vec_elt_size; + merged->vec_data = vec1->vec_data; + return merged; +} + +void print_timing_array(VectorTy *times) { + printf("TIMES: ["); + double *d; + IntTy n = vector_length(times); + for(int i = 0; i < n; i++) { + d = vector_nth(times, i); + if (i == (n-1)) { + printf("%f",*d); + } + else { + printf("%f, ",*d); + } + } + printf("]\n"); +} + +double sum_timing_array(VectorTy *times) { + double *d; + double acc = 0; + for(int i = 0; i < vector_length(times); i++) { + d = vector_nth(times, i); + acc += *d; + } + return acc; +} + +// ------------------------------------- +// Linked lists +// ------------------------------------- + +typedef struct ListTy_struct { + IntTy ll_data_size; + void* ll_data; + struct ListTy_struct* ll_next; +} ListTy; + +static inline ListTy* list_alloc(IntTy data_size) { + // ListTy *ls = ALLOC(sizeof(ListTy)); + ListTy *ls = BUMPALLOC(sizeof(ListTy)); + ls->ll_data_size = data_size; + ls->ll_data = NULL; + ls->ll_next = NULL; + return ls; +} + +static inline BoolTy list_is_empty(ListTy *ls) { + return ls->ll_next == NULL; +} + +static inline ListTy* list_cons(void* elt, ListTy *ls) { + // void* data = ALLOC(ls->data_size); + void* data = BUMPALLOC(ls->ll_data_size); + if (data == NULL) { + printf("list_cons: malloc failed: %lld", ls->ll_data_size); + exit(1); + } + memcpy(data, elt, ls->ll_data_size); + // ListTy *res = ALLOC(sizeof(ListTy)); + ListTy *res = BUMPALLOC(sizeof(ListTy)); + res->ll_data_size = ls->ll_data_size; + res->ll_data = data; + res->ll_next = (ListTy*) ls; + return res; +} + +static inline void* list_head(ListTy *ls) { + return ls->ll_data; +} + +static inline ListTy* list_tail(ListTy *ls) { + return ls->ll_next; +} + +static inline void list_free(ListTy *ls) { + free(ls->ll_data); + free(ls); + return; +} + +static inline ListTy* list_copy(ListTy *ls) { + ListTy *ls2 = list_alloc(ls->ll_data_size); + if (ls->ll_data != NULL) { + void* data = BUMPALLOC(ls->ll_data_size); + memcpy(data, ls->ll_data, ls->ll_data_size); + ls2->ll_data = data; + } + ls2->ll_next = ls->ll_next; + return ls2; +} + +// ------------------------------------- +// Ppm Images +// ------------------------------------- + +typedef struct __Pixel_struct { + IntTy field0; + IntTy field1; + IntTy field2; +} __Pixel; + +void writePpm(char* filename, IntTy width, IntTy height, VectorTy *pixels); +void writePpm_loop(FILE *fp, IntTy idx, IntTy end, VectorTy *pixels); + +// Example: writePpm("gibbon_rgb_1000.ppm", 1000, 1000, pixels); +void writePpm(char* filename, IntTy width, IntTy height, VectorTy *pixels) +{ + FILE *fp; + fp = fopen(filename, "w+"); + fprintf(fp, "P3\n"); + fprintf(fp, "%lld %lld\n255\n", width, height); + IntTy len = vector_length(pixels); + writePpm_loop(fp, 0, len, pixels); + fclose(fp); + return; +} + +void writePpm_loop(FILE *fp, IntTy idx, IntTy end, VectorTy *pixels) +{ + BoolTy fltIf_5768_6575 = idx == end; + + if (fltIf_5768_6575) { + return; + } else { + __Pixel *tmp_112; + tmp_112 = (__Pixel *) vector_nth(pixels, idx); + __Pixel tup = *tmp_112; + IntTy x = tup.field0; + IntTy y = tup.field1; + IntTy z = tup.field2; + // write to file. + fprintf(fp, "%lld %lld %lld\n", x, y, z); + writePpm_loop(fp, (idx+1), end, pixels); + } +} + +/* -------------------------------------------------------------------------------- */ + +int main(int argc, char** argv) +{ + // parameters to parse: + // + // num iterations: How many times to repeat a benchmark. + // tree size: An integer passes to `build_tree()`. + + struct rlimit lim; + int code; + if ( (code = getrlimit(RLIMIT_STACK, &lim)) ) { + fprintf(stderr, " [gibbon rts] failed to getrlimit, code %d\n", code); + exit(1); + } + + // lim.rlim_cur = 1024LU * 1024LU * 1024LU; // 1GB stack. + lim.rlim_cur = 512LU * 1024LU * 1024LU; // 500MB stack. + // lim.rlim_max = lim.rlim_cur; // Normal users may only be able to decrease this. + + // WARNING: Haven't yet figured out why this doesn't work on MacOS... +#ifndef __APPLE__ + code = setrlimit(RLIMIT_STACK, &lim); + while (code) { + fprintf(stderr, " [gibbon rts] Failed to set stack size to %llu, code %d\n", (unsigned long long)lim.rlim_cur, code); + lim.rlim_cur /= 2; + // lim.rlim_max /= 2; + if(lim.rlim_cur < 100 * 1024) { + fprintf(stderr, " [gibbon rts] Failed setrlimit stack size to something reasonable; giving up.\n"); + break; // abort(); + } + int code = setrlimit(RLIMIT_STACK, &lim); + } +#endif + + int got_numargs = 0; // How many numeric arguments have we got. + + int i; + for (i = 1; i < argc; ++i) + { + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { + show_usage(argv); + exit(0); + } + else if (strcmp(argv[i], "--biginf-buffer-size") == 0 && i < argc - 1) + { + global_init_biginf_buf_size = atoll(argv[i + 1]); + i++; + } + else if (strcmp(argv[i], "--inf-buffer-size") == 0 && i < argc - 1) + { + global_init_inf_buf_size = atoll(argv[i + 1]); + i++; + } + else if ((strcmp(argv[i], "--bench-input") == 0)) { + if (i+1 >= argc) { + fprintf(stderr, "Not enough arguments after --bench-input, expected .\n"); + show_usage(argv); + exit(1); + } + global_benchfile_param = argv[i+1]; + i++; + } + else if ((strcmp(argv[i], "--array-input") == 0)) { + if (i+1 >= argc) { + fprintf(stderr, "Not enough arguments after --array-input, expected .\n"); + show_usage(argv); + exit(1); + } + global_arrayfile_param = argv[i+1]; + i++; + } + else if (strcmp(argv[i], "--array-input-length") == 0 && i < argc - 1) { + global_arrayfile_length_param = atoll(argv[i+1]); + i++; + } + else if (strcmp(argv[i], "--bench-prog") == 0 && i < argc - 1) { + int len = strlen(argv[i+1]); + global_bench_prog_param = (char*) malloc((len+1)*sizeof(char)); + strncpy(global_bench_prog_param,argv[i+1],len); + i++; + } + // If present, we expect the two arguments to be + else if (got_numargs >= 2) { + fprintf(stderr, "Extra arguments left over: "); + for(; i < argc; i++) fprintf(stderr, "%s ", argv[i]); + show_usage(argv); + exit(1); + } else { + if (got_numargs == 0) { + global_size_param = atoll(argv[i]); + got_numargs ++; + } else { + global_iters_param = atoll(argv[i]); + } + } + } + + // Initialize global_bench_prog_param to an empty string in case + // the runtime argument --bench-prog isn't passed. + if (global_bench_prog_param == NULL) { + global_bench_prog_param = (char*) malloc(1*sizeof(char)); + *global_bench_prog_param = '\n'; + } + + __main_expr(); + + return 0; +} + + + +// ----------------------------------------------------------------------------- +// Program starts here +// ----------------------------------------------------------------------------- + +typedef struct Prod_struct { } Prod; +typedef struct Int64Prod_struct { + IntTy field0; + } Int64Prod; +typedef struct Int64CursorProd_struct { + IntTy field0; + CursorTy field1; + } Int64CursorProd; +typedef struct BoolProd_struct { + BoolTy field0; + } BoolProd; +typedef struct TagCursorProd_struct { + TagTyPacked field0; + CursorTy field1; + } TagCursorProd; +typedef struct CursorProd_struct { + CursorTy field0; + } CursorProd; +typedef struct CursorInt64Prod_struct { + CursorTy field0; + IntTy field1; + } CursorInt64Prod; +typedef struct CursorCursorProd_struct { + CursorTy field0; + CursorTy field1; + } CursorCursorProd; +typedef struct CursorCursorCursorProd_struct { + CursorTy field0; + CursorTy field1; + CursorTy field2; + } CursorCursorCursorProd; +typedef struct CursorCursorCursorCursorProd_struct { + CursorTy field0; + CursorTy field1; + CursorTy field2; + CursorTy field3; + } CursorCursorCursorCursorProd; + +// ----------------------------------------------------------------------------- +// Stack related functions +// ----------------------------------------------------------------------------- + +typedef struct stackValue{ + + uintptr_t pointers[5]; + bool visitedPreOrder; + bool visitedInOrder; + bool visitedPostOrder; + + CursorInt64Prod returnVal; + +} stackValue; + +stackValue * newStackNode(){ + + stackValue * newNode = (stackValue*) malloc(sizeof(stackValue)); + newNode->visitedPreOrder = false; + newNode->visitedInOrder = false; + newNode->visitedPostOrder = false; + + return newNode; + +} + +// void display(int* top, stackValue* stack) +// { +// if(*top>=0) +// { +// printf("\n The elements in STACK \n"); +// for(int i=*top; i>=0; i--) +// printf("\n%ld\n",stack[i]); +// } +// else +// { +// printf("\n The STACK is empty"); +// } + +// } + +static inline void push(stackValue *pointer, int* top, stackValue* stack){ + + if ((void*)pointer == NULL) + return; + + if(*top < stack_size - 1 ){ + (*top)++; + stack[*top] = *pointer; + } + else{ + printf("Stack Overflow!!\n"); + } +} + +static inline stackValue* pop(int* top, stackValue* stack){ + + if(*top > -1){ + stackValue* pointer = &stack[*top]; + (*top)--; + return pointer; + } + else{ + printf("Stack Underflow\n"); + exit(1); + } + +} + +static inline stackValue* _top(int* top, stackValue* stack){ + + if(*top > -1){ + return &stack[*top]; + } + else{ + printf("Stack Underflow\n"); + exit(1); + } + +} + +static inline void _pop(int* top){ + + if(*top > -1){ + (*top)--; + return; + } + else{ + printf("Stack Underflow\n"); + return; + } + +} + +static inline bool isEmptyStack(int* top){ + + if (*top > -1){ + return false; + } + + return true; + +} + +stackValue* newStack(){ + + stackValue* newstack = (stackValue*) malloc(sizeof(stackValue) * stack_size); + return newstack; + +} + + +CursorCursorCursorProd mkTree(CursorTy end_r_335, CursorTy loc_334, + IntTy d_14_94_151); +void sumTree(CursorTy end_r_337, CursorTy tr_15_95_157, CursorInt64Prod* returnValPreOrder, stackValue* stack); +CursorCursorCursorCursorProd add1Tree(CursorTy end_r_340, CursorTy end_r_341, + CursorTy loc_339, CursorTy t_19_99_163); +CursorCursorCursorCursorProd _copy_Tree(CursorTy end_r_344, CursorTy end_r_345, + CursorTy loc_343, + CursorTy arg_59_103_170); +CursorCursorCursorCursorProd _copy_without_ptrs_Tree(CursorTy end_r_348, + CursorTy end_r_349, + CursorTy loc_347, + CursorTy arg_66_110_177); +CursorProd _traverse_Tree(CursorTy end_r_351, CursorTy arg_73_117_184); +CursorProd _print_Tree(CursorTy end_r_353, CursorTy arg_80_123_190); +CursorCursorCursorCursorProd _add_size_and_rel_offsets_Tree(CursorTy end_r_356, + CursorTy end_r_357, + CursorTy loc_355, + CursorTy arg_325); +CursorCursorCursorProd mkTree(CursorTy end_r_335, CursorTy loc_334, + IntTy d_14_94_151) +{ + if (loc_334 + 32 > end_r_335) { + ChunkTy new_chunk_2 = alloc_chunk(end_r_335); + CursorTy chunk_start_3 = new_chunk_2.chunk_start; + CursorTy chunk_end_4 = new_chunk_2.chunk_end; + + end_r_335 = chunk_end_4; + *(TagTyPacked *) loc_334 = 255; + + CursorTy redir = loc_334 + 1; + + *(CursorTy *) redir = chunk_start_3; + loc_334 = chunk_start_3; + } + + BoolTy fltIf_139_152 = d_14_94_151 == 0; + + if (fltIf_139_152) { + *(TagTyPacked *) loc_334 = 0; + + CursorTy writetag_577 = loc_334 + 1; + + *(IntTy *) writetag_577 = 1; + + CursorTy writecur_578 = writetag_577 + sizeof(IntTy); + + return (CursorCursorCursorProd) {end_r_335, loc_334, writecur_578}; + } else { + IntTy fltAppE_141_153 = d_14_94_151 - 1; + CursorTy loc_371 = loc_334 + 1; + CursorCursorCursorProd tmp_struct_0 = + mkTree(end_r_335, loc_371, fltAppE_141_153); + CursorTy pvrtmp_899 = tmp_struct_0.field0; + CursorTy pvrtmp_900 = tmp_struct_0.field1; + CursorTy pvrtmp_901 = tmp_struct_0.field2; + IntTy fltAppE_143_155 = d_14_94_151 - 1; + CursorCursorCursorProd tmp_struct_1 = + mkTree(pvrtmp_899, pvrtmp_901, fltAppE_143_155); + CursorTy pvrtmp_906 = tmp_struct_1.field0; + CursorTy pvrtmp_907 = tmp_struct_1.field1; + CursorTy pvrtmp_908 = tmp_struct_1.field2; + + *(TagTyPacked *) loc_334 = 1; + + CursorTy writetag_582 = loc_334 + 1; + + return (CursorCursorCursorProd) {pvrtmp_906, loc_334, pvrtmp_908}; + } +} +void sumTree(CursorTy end_r_337, CursorTy tr_15_95_157, CursorInt64Prod* returnedVal, stackValue* stack) +{ + int top = -1; + + stackValue* root = newStackNode(); + root->pointers[0] = (uintptr_t) tr_15_95_157; + root->visitedInOrder = false; + root->visitedPostOrder = false; + + push(root, &top, stack); + + IntTy pvrtmp_922; + CursorTy pvrtmp_921; + CursorTy pvrtmp_923; + IntTy pvrtmp_924; + + returnedVal->field1 = 0; + + while(!isEmptyStack(&top)){ + + stackValue* currNode = _top(&top, stack); + tr_15_95_157 = (CursorTy) currNode->pointers[0]; + + TagTyPacked tmpval_917 = *(TagTyPacked *) tr_15_95_157; + CursorTy tmpcur_918 = tr_15_95_157 + 1; + + switch_933: + ; + switch (tmpval_917) { + + case 0: + { + IntTy tmpval_919 = *(IntTy *) tmpcur_918; + CursorTy jump_477 = tmpcur_918 + 8; + + returnedVal->field0 = jump_477; + returnedVal->field1 += tmpval_919; + _pop(&top); + break; + } + + case 1: + { + + if(currNode->visitedInOrder){ + pvrtmp_921 = returnedVal->field0; + pvrtmp_922 = returnedVal->field1; + + stackValue right; + right.pointers[0] = (uintptr_t) pvrtmp_921; + right.visitedInOrder = false; + right.visitedPostOrder = false; + + push(&right, &top, stack); + currNode->visitedInOrder = false; + currNode->visitedPostOrder = true; + continue; + + } + + if (currNode->visitedPostOrder){ + + //pvrtmp_923 = returnedVal->field0; + //pvrtmp_924 = returnedVal->field1; + //IntTy tailprim_480 = pvrtmp_922 + pvrtmp_924; + + //returnedVal->field0 = pvrtmp_923; + //returnedVal->field1 = tailprim_480; + + _pop(&top); + continue; + + } + + + + stackValue left; + left.pointers[0] = (uintptr_t) tmpcur_918; + left.visitedInOrder = false; + left.visitedPostOrder = false; + + push(&left, &top, stack); + currNode->visitedInOrder = true; + + + //sumTree(end_r_337, tmpcur_918, returnedVal); + //push(tmpcur_918, &top, stack); + //if (maskVal == 0){ + // push((uintptr_t) returnedVal, &top, stack); + // push((uintptr_t) tmpcur_918, &top, stack); + // continue; + //} + //else if (maskVal == 1) + // maskVal = 2; + + // CursorTy pvrtmp_921 = returnedVal->field0; + // IntTy pvrtmp_922 = returnedVal->field1; + + //sumTree(end_r_337, pvrtmp_921, returnedVal); + //if (maskVal == 0){ + // push((uintptr_t) returnedVal, &top, stack); + // push((uintptr_t) pvrtmp_921, &top, stack); + // continue; + //} + //else if (maskVal == 3) + + // CursorTy pvrtmp_923 = returnedVal->field0; + // IntTy pvrtmp_924 = returnedVal->field1; + // IntTy tailprim_480 = pvrtmp_922 + pvrtmp_924; + + // returnedVal->field0 = pvrtmp_923; + // returnedVal->field1 = tailprim_480; + + break; + + } + + case INDIRECTION_TAG: + { + //printf("INDIRECTION CASE\n"); + CursorTy tmpcur_925 = *(CursorTy *) tmpcur_918; + CursorTy tmpaftercur_926 = tmpcur_918 + 8; + CursorTy jump_517 = tmpcur_918 + 8; + + + _pop(&top); + + stackValue toPush; + toPush.pointers[0] = (uintptr_t) tmpcur_925; + toPush.visitedInOrder = false; + toPush.visitedPostOrder = false; + + push(&toPush, &top, stack); + + + } + + case REDIRECTION_TAG: + { + //printf("REDIRECTION_TAG\n"); + CursorTy tmpcur_929 = *(CursorTy *) tmpcur_918; + CursorTy tmpaftercur_930 = tmpcur_918 + 8; + + _pop(&top); + + stackValue toPush; + toPush.pointers[0] = (uintptr_t) tmpcur_929; + toPush.visitedInOrder = false; + toPush.visitedPostOrder = false; + + push(&toPush, &top, stack); + + //currNode->visitedInOrder = true; + //currNode->visitedPostOrder = true; + //sumTree(end_r_337, tmpcur_929, returnedVal); + //break; + + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_917"); + exit(1); + } + } + } +} + +CursorCursorCursorCursorProd add1Tree(CursorTy end_r_340, CursorTy end_r_341, + CursorTy loc_339, CursorTy t_19_99_163) +{ + if (loc_339 + 32 > end_r_341) { + ChunkTy new_chunk_13 = alloc_chunk(end_r_341); + CursorTy chunk_start_14 = new_chunk_13.chunk_start; + CursorTy chunk_end_15 = new_chunk_13.chunk_end; + + end_r_341 = chunk_end_15; + *(TagTyPacked *) loc_339 = 255; + + CursorTy redir = loc_339 + 1; + + *(CursorTy *) redir = chunk_start_14; + loc_339 = chunk_start_14; + } + + TagTyPacked tmpval_934 = *(TagTyPacked *) t_19_99_163; + CursorTy tmpcur_935 = t_19_99_163 + 1; + + + switch_986: + ; + switch (tmpval_934) { + + case 0: + { + IntTy tmpval_936 = *(IntTy *) tmpcur_935; + CursorTy tmpcur_937 = tmpcur_935 + sizeof(IntTy); + CursorTy jump_481 = tmpcur_935 + 8; + IntTy fltPkd_146_165 = tmpval_936 + 1; + + *(TagTyPacked *) loc_339 = 0; + + CursorTy writetag_599 = loc_339 + 1; + + *(IntTy *) writetag_599 = fltPkd_146_165; + + CursorTy writecur_600 = writetag_599 + sizeof(IntTy); + + return (CursorCursorCursorCursorProd) {end_r_341, jump_481, loc_339, + writecur_600}; + break; + } + + case 1: + { + CursorTy loc_398 = loc_339 + 1; + CursorCursorCursorCursorProd tmp_struct_9 = + add1Tree(end_r_340, end_r_341, loc_398, tmpcur_935); + CursorTy pvrtmp_942 = tmp_struct_9.field0; + CursorTy pvrtmp_943 = tmp_struct_9.field1; + CursorTy pvrtmp_944 = tmp_struct_9.field2; + CursorTy pvrtmp_945 = tmp_struct_9.field3; + CursorCursorCursorCursorProd tmp_struct_10 = + add1Tree(end_r_340, pvrtmp_942, pvrtmp_945, pvrtmp_943); + CursorTy pvrtmp_950 = tmp_struct_10.field0; + CursorTy pvrtmp_951 = tmp_struct_10.field1; + CursorTy pvrtmp_952 = tmp_struct_10.field2; + CursorTy pvrtmp_953 = tmp_struct_10.field3; + + *(TagTyPacked *) loc_339 = 1; + + CursorTy writetag_605 = loc_339 + 1; + + return (CursorCursorCursorCursorProd) {pvrtmp_950, pvrtmp_951, + loc_339, pvrtmp_953}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_962 = *(CursorTy *) tmpcur_935; + CursorTy tmpaftercur_963 = tmpcur_935 + 8; + CursorTy jump_523 = tmpcur_935 + 8; + CursorCursorCursorCursorProd tmp_struct_11 = + add1Tree(end_r_340, end_r_341, loc_339, tmpcur_962); + CursorTy pvrtmp_964 = tmp_struct_11.field0; + CursorTy pvrtmp_965 = tmp_struct_11.field1; + CursorTy pvrtmp_966 = tmp_struct_11.field2; + CursorTy pvrtmp_967 = tmp_struct_11.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_964, jump_523, + pvrtmp_966, pvrtmp_967}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_974 = *(CursorTy *) tmpcur_935; + CursorTy tmpaftercur_975 = tmpcur_935 + 8; + CursorCursorCursorCursorProd tmp_struct_12 = + add1Tree(end_r_340, end_r_341, loc_339, tmpcur_974); + CursorTy pvrtmp_976 = tmp_struct_12.field0; + CursorTy pvrtmp_977 = tmp_struct_12.field1; + CursorTy pvrtmp_978 = tmp_struct_12.field2; + CursorTy pvrtmp_979 = tmp_struct_12.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_976, pvrtmp_977, + pvrtmp_978, pvrtmp_979}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_934"); + exit(1); + } + } +} +CursorCursorCursorCursorProd _copy_Tree(CursorTy end_r_344, CursorTy end_r_345, + CursorTy loc_343, + CursorTy arg_59_103_170) +{ + if (loc_343 + 32 > end_r_345) { + ChunkTy new_chunk_20 = alloc_chunk(end_r_345); + CursorTy chunk_start_21 = new_chunk_20.chunk_start; + CursorTy chunk_end_22 = new_chunk_20.chunk_end; + + end_r_345 = chunk_end_22; + *(TagTyPacked *) loc_343 = 255; + + CursorTy redir = loc_343 + 1; + + *(CursorTy *) redir = chunk_start_21; + loc_343 = chunk_start_21; + } + + TagTyPacked tmpval_987 = *(TagTyPacked *) arg_59_103_170; + CursorTy tmpcur_988 = arg_59_103_170 + 1; + + + switch_1039: + ; + switch (tmpval_987) { + + case 0: + { + IntTy tmpval_989 = *(IntTy *) tmpcur_988; + CursorTy tmpcur_990 = tmpcur_988 + sizeof(IntTy); + CursorTy jump_486 = tmpcur_988 + 8; + + *(TagTyPacked *) loc_343 = 0; + + CursorTy writetag_617 = loc_343 + 1; + + *(IntTy *) writetag_617 = tmpval_989; + + CursorTy writecur_618 = writetag_617 + sizeof(IntTy); + + return (CursorCursorCursorCursorProd) {end_r_345, jump_486, loc_343, + writecur_618}; + break; + } + + case 1: + { + CursorTy loc_416 = loc_343 + 1; + CursorCursorCursorCursorProd tmp_struct_16 = + _copy_Tree(end_r_344, end_r_345, loc_416, tmpcur_988); + CursorTy pvrtmp_995 = tmp_struct_16.field0; + CursorTy pvrtmp_996 = tmp_struct_16.field1; + CursorTy pvrtmp_997 = tmp_struct_16.field2; + CursorTy pvrtmp_998 = tmp_struct_16.field3; + CursorCursorCursorCursorProd tmp_struct_17 = + _copy_Tree(end_r_344, pvrtmp_995, pvrtmp_998, pvrtmp_996); + CursorTy pvrtmp_1003 = tmp_struct_17.field0; + CursorTy pvrtmp_1004 = tmp_struct_17.field1; + CursorTy pvrtmp_1005 = tmp_struct_17.field2; + CursorTy pvrtmp_1006 = tmp_struct_17.field3; + + *(TagTyPacked *) loc_343 = 1; + + CursorTy writetag_623 = loc_343 + 1; + + return (CursorCursorCursorCursorProd) {pvrtmp_1003, pvrtmp_1004, + loc_343, pvrtmp_1006}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_1015 = *(CursorTy *) tmpcur_988; + CursorTy tmpaftercur_1016 = tmpcur_988 + 8; + CursorTy jump_529 = tmpcur_988 + 8; + CursorCursorCursorCursorProd tmp_struct_18 = + _copy_Tree(end_r_344, end_r_345, loc_343, tmpcur_1015); + CursorTy pvrtmp_1017 = tmp_struct_18.field0; + CursorTy pvrtmp_1018 = tmp_struct_18.field1; + CursorTy pvrtmp_1019 = tmp_struct_18.field2; + CursorTy pvrtmp_1020 = tmp_struct_18.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1017, jump_529, + pvrtmp_1019, pvrtmp_1020}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_1027 = *(CursorTy *) tmpcur_988; + CursorTy tmpaftercur_1028 = tmpcur_988 + 8; + CursorCursorCursorCursorProd tmp_struct_19 = + _copy_Tree(end_r_344, end_r_345, loc_343, tmpcur_1027); + CursorTy pvrtmp_1029 = tmp_struct_19.field0; + CursorTy pvrtmp_1030 = tmp_struct_19.field1; + CursorTy pvrtmp_1031 = tmp_struct_19.field2; + CursorTy pvrtmp_1032 = tmp_struct_19.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1029, pvrtmp_1030, + pvrtmp_1031, pvrtmp_1032}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_987"); + exit(1); + } + } +} +CursorCursorCursorCursorProd _copy_without_ptrs_Tree(CursorTy end_r_348, + CursorTy end_r_349, + CursorTy loc_347, + CursorTy arg_66_110_177) +{ + TagTyPacked tmpval_1040 = *(TagTyPacked *) arg_66_110_177; + CursorTy tmpcur_1041 = arg_66_110_177 + 1; + + + switch_1092: + ; + switch (tmpval_1040) { + + case 0: + { + IntTy tmpval_1042 = *(IntTy *) tmpcur_1041; + CursorTy tmpcur_1043 = tmpcur_1041 + sizeof(IntTy); + CursorTy jump_491 = tmpcur_1041 + 8; + + *(TagTyPacked *) loc_347 = 0; + + CursorTy writetag_635 = loc_347 + 1; + + *(IntTy *) writetag_635 = tmpval_1042; + + CursorTy writecur_636 = writetag_635 + sizeof(IntTy); + + return (CursorCursorCursorCursorProd) {end_r_349, jump_491, loc_347, + writecur_636}; + break; + } + + case 1: + { + CursorTy loc_434 = loc_347 + 1; + CursorCursorCursorCursorProd tmp_struct_23 = + _copy_without_ptrs_Tree(end_r_348, end_r_349, loc_434, tmpcur_1041); + CursorTy pvrtmp_1048 = tmp_struct_23.field0; + CursorTy pvrtmp_1049 = tmp_struct_23.field1; + CursorTy pvrtmp_1050 = tmp_struct_23.field2; + CursorTy pvrtmp_1051 = tmp_struct_23.field3; + CursorCursorCursorCursorProd tmp_struct_24 = + _copy_without_ptrs_Tree(end_r_348, pvrtmp_1048, pvrtmp_1051, pvrtmp_1049); + CursorTy pvrtmp_1056 = tmp_struct_24.field0; + CursorTy pvrtmp_1057 = tmp_struct_24.field1; + CursorTy pvrtmp_1058 = tmp_struct_24.field2; + CursorTy pvrtmp_1059 = tmp_struct_24.field3; + + *(TagTyPacked *) loc_347 = 1; + + CursorTy writetag_641 = loc_347 + 1; + + return (CursorCursorCursorCursorProd) {pvrtmp_1056, pvrtmp_1057, + loc_347, pvrtmp_1059}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_1068 = *(CursorTy *) tmpcur_1041; + CursorTy tmpaftercur_1069 = tmpcur_1041 + 8; + CursorTy jump_535 = tmpcur_1041 + 8; + CursorCursorCursorCursorProd tmp_struct_25 = + _copy_without_ptrs_Tree(end_r_348, end_r_349, loc_347, tmpcur_1068); + CursorTy pvrtmp_1070 = tmp_struct_25.field0; + CursorTy pvrtmp_1071 = tmp_struct_25.field1; + CursorTy pvrtmp_1072 = tmp_struct_25.field2; + CursorTy pvrtmp_1073 = tmp_struct_25.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1070, jump_535, + pvrtmp_1072, pvrtmp_1073}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_1080 = *(CursorTy *) tmpcur_1041; + CursorTy tmpaftercur_1081 = tmpcur_1041 + 8; + CursorCursorCursorCursorProd tmp_struct_26 = + _copy_without_ptrs_Tree(end_r_348, end_r_349, loc_347, tmpcur_1080); + CursorTy pvrtmp_1082 = tmp_struct_26.field0; + CursorTy pvrtmp_1083 = tmp_struct_26.field1; + CursorTy pvrtmp_1084 = tmp_struct_26.field2; + CursorTy pvrtmp_1085 = tmp_struct_26.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1082, pvrtmp_1083, + pvrtmp_1084, pvrtmp_1085}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1040"); + exit(1); + } + } +} +CursorProd _traverse_Tree(CursorTy end_r_351, CursorTy arg_73_117_184) +{ + TagTyPacked tmpval_1093 = *(TagTyPacked *) arg_73_117_184; + CursorTy tmpcur_1094 = arg_73_117_184 + 1; + + + switch_1105: + ; + switch (tmpval_1093) { + + case 0: + { + IntTy tmpval_1095 = *(IntTy *) tmpcur_1094; + CursorTy tmpcur_1096 = tmpcur_1094 + sizeof(IntTy); + CursorTy jump_496 = tmpcur_1094 + 8; + + return (CursorProd) {jump_496}; + break; + } + + case 1: + { + CursorProd tmp_struct_27 = _traverse_Tree(end_r_351, tmpcur_1094); + CursorTy pvrtmp_1097 = tmp_struct_27.field0; + CursorProd tmp_struct_28 = _traverse_Tree(end_r_351, pvrtmp_1097); + CursorTy pvrtmp_1098 = tmp_struct_28.field0; + + return (CursorProd) {pvrtmp_1098}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_1099 = *(CursorTy *) tmpcur_1094; + CursorTy tmpaftercur_1100 = tmpcur_1094 + 8; + CursorTy jump_541 = tmpcur_1094 + 8; + CursorProd tmp_struct_29 = _traverse_Tree(end_r_351, tmpcur_1099); + CursorTy pvrtmp_1101 = tmp_struct_29.field0; + + return (CursorProd) {jump_541}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_1102 = *(CursorTy *) tmpcur_1094; + CursorTy tmpaftercur_1103 = tmpcur_1094 + 8; + CursorProd tmp_struct_30 = _traverse_Tree(end_r_351, tmpcur_1102); + CursorTy pvrtmp_1104 = tmp_struct_30.field0; + + return (CursorProd) {pvrtmp_1104}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1093"); + exit(1); + } + } +} +CursorProd _print_Tree(CursorTy end_r_353, CursorTy arg_80_123_190) +{ + TagTyPacked tmpval_1106 = *(TagTyPacked *) arg_80_123_190; + CursorTy tmpcur_1107 = arg_80_123_190 + 1; + + + switch_1118: + ; + switch (tmpval_1106) { + + case 0: + { + IntTy tmpval_1108 = *(IntTy *) tmpcur_1107; + CursorTy tmpcur_1109 = tmpcur_1107 + sizeof(IntTy); + CursorTy jump_501 = tmpcur_1107 + 8; + unsigned char wildcard_83_125_192 = print_symbol(870); + unsigned char wildcard_85_126_193 = print_symbol(873); + unsigned char y_82_127_194 = printf("%lld", tmpval_1108); + unsigned char wildcard_84_128_195 = print_symbol(868); + + return (CursorProd) {jump_501}; + break; + } + + case 1: + { + unsigned char wildcard_90_131_198 = print_symbol(869); + unsigned char wildcard_93_132_199 = print_symbol(873); + CursorProd tmp_struct_31 = _print_Tree(end_r_353, tmpcur_1107); + CursorTy pvrtmp_1110 = tmp_struct_31.field0; + unsigned char wildcard_92_134_201 = print_symbol(873); + CursorProd tmp_struct_32 = _print_Tree(end_r_353, pvrtmp_1110); + CursorTy pvrtmp_1111 = tmp_struct_32.field0; + unsigned char wildcard_91_136_203 = print_symbol(868); + + return (CursorProd) {pvrtmp_1111}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_1112 = *(CursorTy *) tmpcur_1107; + CursorTy tmpaftercur_1113 = tmpcur_1107 + 8; + CursorTy jump_547 = tmpcur_1107 + 8; + unsigned char wildcard_550 = print_symbol(872); + CursorProd tmp_struct_33 = _print_Tree(end_r_353, tmpcur_1112); + CursorTy pvrtmp_1114 = tmp_struct_33.field0; + + return (CursorProd) {jump_547}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_1115 = *(CursorTy *) tmpcur_1107; + CursorTy tmpaftercur_1116 = tmpcur_1107 + 8; + unsigned char wildcard_550 = print_symbol(871); + CursorProd tmp_struct_34 = _print_Tree(end_r_353, tmpcur_1115); + CursorTy pvrtmp_1117 = tmp_struct_34.field0; + + return (CursorProd) {pvrtmp_1117}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1106"); + exit(1); + } + } +} +CursorCursorCursorCursorProd _add_size_and_rel_offsets_Tree(CursorTy end_r_356, + CursorTy end_r_357, + CursorTy loc_355, + CursorTy arg_325) +{ + if (loc_355 + 32 > end_r_357) { + ChunkTy new_chunk_39 = alloc_chunk(end_r_357); + CursorTy chunk_start_40 = new_chunk_39.chunk_start; + CursorTy chunk_end_41 = new_chunk_39.chunk_end; + + end_r_357 = chunk_end_41; + *(TagTyPacked *) loc_355 = 255; + + CursorTy redir = loc_355 + 1; + + *(CursorTy *) redir = chunk_start_40; + loc_355 = chunk_start_40; + } + + TagTyPacked tmpval_1119 = *(TagTyPacked *) arg_325; + CursorTy tmpcur_1120 = arg_325 + 1; + + + switch_1171: + ; + switch (tmpval_1119) { + + case 0: + { + IntTy tmpval_1121 = *(IntTy *) tmpcur_1120; + CursorTy tmpcur_1122 = tmpcur_1120 + sizeof(IntTy); + CursorTy jump_506 = tmpcur_1120 + 8; + + *(TagTyPacked *) loc_355 = 0; + + CursorTy writetag_675 = loc_355 + 1; + + *(IntTy *) writetag_675 = tmpval_1121; + + CursorTy writecur_676 = writetag_675 + sizeof(IntTy); + + return (CursorCursorCursorCursorProd) {end_r_357, jump_506, loc_355, + writecur_676}; + break; + } + + case 1: + { + CursorTy loc_470 = loc_355 + 1; + CursorCursorCursorCursorProd tmp_struct_35 = + _add_size_and_rel_offsets_Tree(end_r_356, end_r_357, loc_470, tmpcur_1120); + CursorTy pvrtmp_1127 = tmp_struct_35.field0; + CursorTy pvrtmp_1128 = tmp_struct_35.field1; + CursorTy pvrtmp_1129 = tmp_struct_35.field2; + CursorTy pvrtmp_1130 = tmp_struct_35.field3; + CursorCursorCursorCursorProd tmp_struct_36 = + _add_size_and_rel_offsets_Tree(end_r_356, pvrtmp_1127, pvrtmp_1130, pvrtmp_1128); + CursorTy pvrtmp_1135 = tmp_struct_36.field0; + CursorTy pvrtmp_1136 = tmp_struct_36.field1; + CursorTy pvrtmp_1137 = tmp_struct_36.field2; + CursorTy pvrtmp_1138 = tmp_struct_36.field3; + + *(TagTyPacked *) loc_355 = 1; + + CursorTy writetag_681 = loc_355 + 1; + + return (CursorCursorCursorCursorProd) {pvrtmp_1135, pvrtmp_1136, + loc_355, pvrtmp_1138}; + break; + } + + case INDIRECTION_TAG: + { + CursorTy tmpcur_1147 = *(CursorTy *) tmpcur_1120; + CursorTy tmpaftercur_1148 = tmpcur_1120 + 8; + CursorTy jump_553 = tmpcur_1120 + 8; + CursorCursorCursorCursorProd tmp_struct_37 = + _add_size_and_rel_offsets_Tree(end_r_356, end_r_357, loc_355, tmpcur_1147); + CursorTy pvrtmp_1149 = tmp_struct_37.field0; + CursorTy pvrtmp_1150 = tmp_struct_37.field1; + CursorTy pvrtmp_1151 = tmp_struct_37.field2; + CursorTy pvrtmp_1152 = tmp_struct_37.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1149, jump_553, + pvrtmp_1151, pvrtmp_1152}; + break; + } + + case REDIRECTION_TAG: + { + CursorTy tmpcur_1159 = *(CursorTy *) tmpcur_1120; + CursorTy tmpaftercur_1160 = tmpcur_1120 + 8; + CursorCursorCursorCursorProd tmp_struct_38 = + _add_size_and_rel_offsets_Tree(end_r_356, end_r_357, loc_355, tmpcur_1159); + CursorTy pvrtmp_1161 = tmp_struct_38.field0; + CursorTy pvrtmp_1162 = tmp_struct_38.field1; + CursorTy pvrtmp_1163 = tmp_struct_38.field2; + CursorTy pvrtmp_1164 = tmp_struct_38.field3; + + return (CursorCursorCursorCursorProd) {pvrtmp_1161, pvrtmp_1162, + pvrtmp_1163, pvrtmp_1164}; + break; + } + + default: + { + printf("%s\n", "Unknown tag in: tmpval_1119"); + exit(1); + } + } +} +int __main_expr() +{ + add_symbol(868, ")"); + add_symbol(869, "(Node"); + add_symbol(870, "(Leaf"); + add_symbol(871, " ->r "); + add_symbol(872, " ->i "); + add_symbol(873, " "); + + clock_t start, end; + double cpu_time_used; + + + RegionTy *region_874 = alloc_region(global_init_inf_buf_size); + CursorTy r_367 = region_874->reg_heap; + IntTy sizeof_end_r_367_875 = global_init_inf_buf_size; + CursorTy end_r_367 = r_367 + sizeof_end_r_367_875; + RegionTy *region_876 = alloc_region(global_init_inf_buf_size); + CursorTy r_366 = region_876->reg_heap; + IntTy sizeof_end_r_366_877 = global_init_inf_buf_size; + CursorTy end_r_366 = r_366 + sizeof_end_r_366_877; + CursorCursorCursorProd tmp_struct_42 = mkTree(end_r_367, r_367, 25); + CursorTy pvrtmp_878 = tmp_struct_42.field0; + CursorTy pvrtmp_879 = tmp_struct_42.field1; + CursorTy pvrtmp_880 = tmp_struct_42.field2; + CursorCursorCursorCursorProd tmp_struct_43 = + add1Tree(pvrtmp_878, end_r_366, r_366, pvrtmp_879); + CursorTy pvrtmp_885 = tmp_struct_43.field0; + CursorTy pvrtmp_886 = tmp_struct_43.field1; + CursorTy pvrtmp_887 = tmp_struct_43.field2; + CursorTy pvrtmp_888 = tmp_struct_43.field3; + CursorInt64Prod tmp_struct_44; + + stackValue* stack = newStack(); + + start = clock(); + sumTree(pvrtmp_885, pvrtmp_887, &tmp_struct_44, stack); + end = clock(); + + cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; + + printf("Execution time: %lf\n", cpu_time_used); + + CursorTy pvrtmp_893 = tmp_struct_44.field0; + IntTy pvrtmp_894 = tmp_struct_44.field1; + + printf("%lld", pvrtmp_894); + printf("\n"); + free_symtable(); + return 0; +} \ No newline at end of file