From 426881cde464691b61c5c49cf5038d21aace75fe Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 21 Apr 2015 10:21:06 +0200 Subject: Support for GCC-style extended asm, continued: - support "r", "m" and "i" constraints - support "%Q" and "%R" modifiers for register pairs - support register clobbers - split off analysis and transformation of asm statements in cparser/ExtendedAsm.ml --- common/AST.v | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'common/AST.v') diff --git a/common/AST.v b/common/AST.v index 1e1e2b9d..2550844b 100644 --- a/common/AST.v +++ b/common/AST.v @@ -584,7 +584,7 @@ Inductive external_function : Type := (** Another form of annotation that takes one argument, produces an event carrying the text and the value of this argument, and returns the value of the argument. *) - | EF_inline_asm (text: ident) (sg: signature). + | EF_inline_asm (text: ident) (sg: signature) (clobbers: list ident). (** Inline [asm] statements. Semantically, treated like an annotation with no parameters ([EF_annot text nil]). To be used with caution, as it can invalidate the semantic @@ -606,7 +606,7 @@ Definition ef_sig (ef: external_function): signature := | EF_memcpy sz al => mksignature (Tint :: Tint :: nil) None cc_default | EF_annot text targs => mksignature targs None cc_default | EF_annot_val text targ => mksignature (targ :: nil) (Some targ) cc_default - | EF_inline_asm text sg => sg + | EF_inline_asm text sg clob => sg end. (** Whether an external function should be inlined by the compiler. *) @@ -624,7 +624,7 @@ Definition ef_inline (ef: external_function) : bool := | EF_memcpy sz al => true | EF_annot text targs => true | EF_annot_val text targ => true - | EF_inline_asm text targs => true + | EF_inline_asm text sg clob => true end. (** Whether an external function must reload its arguments. *) @@ -642,6 +642,7 @@ Proof. generalize ident_eq signature_eq chunk_eq typ_eq zeq Int.eq_dec; intros. decide equality. apply list_eq_dec. auto. + apply list_eq_dec. auto. Defined. Global Opaque external_function_eq. -- cgit