X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmParse.y;h=c2dd22f8dc3e6784158a4202704c0b7cdce6681f;hb=9ec880fcb29ff038bcc72d78bbe2fd6933566047;hp=fa822f60a4f6552f65fd75e1461d862938a4f601;hpb=1e15be89f436ae0a8ad0c2ca4fbf949c8f2c6cfc;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y index fa822f6..c2dd22f 100644 --- a/compiler/cmm/CmmParse.y +++ b/compiler/cmm/CmmParse.y @@ -294,7 +294,7 @@ decl :: { ExtCode } | STRING type names ';' {% do k <- parseKind $1; return $ mapM_ (newLocal k $2) $3 } - | 'import' names ';' { return () } -- ignore imports + | 'import' names ';' { mapM_ newImport $2 } | 'export' names ';' { return () } -- ignore exports names :: { [FastString] } @@ -793,6 +793,13 @@ newLocal kind ty name = do addVarDecl name (CmmReg (CmmLocal reg)) return reg +-- Creates a foreign label in the import. CLabel's labelDynamic +-- classifies these labels as dynamic, hence the code generator emits the +-- PIC code for them. +newImport :: FastString -> ExtFCode () +newImport name = + addVarDecl name (CmmLit (CmmLabel (mkForeignLabel name Nothing True))) + newLabel :: FastString -> ExtFCode BlockId newLabel name = do u <- code newUnique @@ -870,17 +877,17 @@ foreignCall conv_string results_code expr_code args_code vols safety results <- sequence results_code expr <- expr_code args <- sequence args_code - --code (stmtC (CmmCall (CmmForeignCall expr convention) results args safety)) + --code (stmtC (CmmCall (CmmCallee expr convention) results args safety)) case convention of -- Temporary hack so at least some functions are CmmSafe - CmmCallConv -> code (stmtC (CmmCall (CmmForeignCall expr convention) results args safety)) + CmmCallConv -> code (stmtC (CmmCall (CmmCallee expr convention) results args safety)) _ -> case safety of CmmUnsafe -> code (emitForeignCall' PlayRisky results - (CmmForeignCall expr convention) args vols NoC_SRT) + (CmmCallee expr convention) args vols NoC_SRT) CmmSafe srt -> code (emitForeignCall' (PlaySafe unused) results - (CmmForeignCall expr convention) args vols NoC_SRT) where + (CmmCallee expr convention) args vols NoC_SRT) where unused = panic "not used by emitForeignCall'" primCall