+maybe_results :: { [ExtFCode (CmmFormal, MachHint)] }
+ : {- empty -} { [] }
+ | hint_lregs '=' { $1 }
+
+hint_lregs0 :: { [ExtFCode (CmmFormal, MachHint)] }
+ : {- empty -} { [] }
+ | hint_lregs { $1 }
+
+hint_lregs :: { [ExtFCode (CmmFormal, MachHint)] }
+ : hint_lreg ',' { [$1] }
+ | hint_lreg { [$1] }
+ | hint_lreg ',' hint_lregs { $1 : $3 }
+
+hint_lreg :: { ExtFCode (CmmFormal, MachHint) }
+ : local_lreg { do e <- $1; return (e, inferHint (CmmReg (CmmLocal e))) }
+ | STRING local_lreg {% do h <- parseHint $1;
+ return $ do
+ e <- $2; return (e,h) }
+
+local_lreg :: { ExtFCode LocalReg }
+ : NAME { do e <- lookupName $1;
+ return $
+ case e of
+ CmmReg (CmmLocal r) -> r
+ other -> pprPanic "CmmParse:" (ftext $1 <> text " not a local register") }
+