aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libtcc.c6
-rw-r--r--tcc.h3
-rw-r--r--tccasm.c35
-rw-r--r--tccgen.c29
4 files changed, 29 insertions, 44 deletions
diff --git a/libtcc.c b/libtcc.c
index a755708..6594141 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -72,12 +72,6 @@ ST_DATA void *rt_prog_main;
#endif /* ALL_IN_ONE */
/********************************************************/
-#ifndef CONFIG_TCC_ASM_LABEL
-ST_FUNC void asm_label_instr(CString *)
-{
- error("inline asm() not supported");
-}
-#endif
#ifndef CONFIG_TCC_ASM
ST_FUNC void asm_instr(void)
{
diff --git a/tcc.h b/tcc.h
index 95a2efb..492c724 100644
--- a/tcc.h
+++ b/tcc.h
@@ -122,7 +122,6 @@
#if !defined(TCC_TARGET_ARM) && !defined(TCC_TARGET_C67)
#define CONFIG_TCC_ASM
#endif
-#define CONFIG_TCC_ASM_LABEL
/* object format selection */
#if defined(TCC_TARGET_C67)
@@ -1073,6 +1072,7 @@ ST_FUNC int type_size(CType *type, int *a);
ST_FUNC void mk_pointer(CType *type);
ST_FUNC void vstore(void);
ST_FUNC void inc(int post, int c);
+ST_FUNC void parse_asm_str(CString *astr);
ST_FUNC int lvalue_type(int t);
ST_FUNC void indir(void);
ST_FUNC void unary(void);
@@ -1196,7 +1196,6 @@ ST_FUNC int tcc_load_coff(TCCState * s1, int fd);
/* ------------ tccasm.c ------------ */
ST_FUNC void asm_instr(void);
-ST_FUNC void asm_label_instr(CString *);
ST_FUNC void asm_global_instr(void);
#ifdef CONFIG_TCC_ASM
diff --git a/tccasm.c b/tccasm.c
index 20d1fbc..02cfe67 100644
--- a/tccasm.c
+++ b/tccasm.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifdef CONFIG_TCC_ASM
-
#include "tcc.h"
ST_FUNC int asm_get_local_label_name(TCCState *s1, unsigned int n)
@@ -993,37 +991,6 @@ static void parse_asm_operands(ASMOperand *operands, int *nb_operands_ptr,
}
}
-#endif
-
-static void parse_asm_str(CString *astr)
-{
- skip('(');
- /* read the string */
- if (tok != TOK_STR)
- expect("string constant");
- cstr_new(astr);
- while (tok == TOK_STR) {
- /* XXX: add \0 handling too ? */
- cstr_cat(astr, tokc.cstr->data);
- next();
- }
- cstr_ccat(astr, '\0');
-}
-
-/* Parse an asm label and return the label
- * Don't forget to free the CString in the caller! */
-static void asm_label_instr(CString *astr)
-{
- next();
- parse_asm_str(astr);
- skip(')');
-#ifdef ASM_DEBUG
- printf("asm_alias: \"%s\"\n", (char *)astr->data);
-#endif
-}
-
-#ifdef CONFIG_TCC_ASM
-
/* parse the GCC asm() instruction */
ST_FUNC void asm_instr(void)
{
@@ -1154,5 +1121,3 @@ ST_FUNC void asm_global_instr(void)
cstr_free(&astr);
}
-
-#endif
diff --git a/tccgen.c b/tccgen.c
index 656c334..ce7a420 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2991,6 +2991,33 @@ static inline void convert_parameter_type(CType *pt)
}
}
+ST_FUNC void parse_asm_str(CString *astr)
+{
+ skip('(');
+ /* read the string */
+ if (tok != TOK_STR)
+ expect("string constant");
+ cstr_new(astr);
+ while (tok == TOK_STR) {
+ /* XXX: add \0 handling too ? */
+ cstr_cat(astr, tokc.cstr->data);
+ next();
+ }
+ cstr_ccat(astr, '\0');
+}
+
+/* Parse an asm label and return the label
+ * Don't forget to free the CString in the caller! */
+static void asm_label_instr(CString *astr)
+{
+ next();
+ parse_asm_str(astr);
+ skip(')');
+#ifdef ASM_DEBUG
+ printf("asm_alias: \"%s\"\n", (char *)astr->data);
+#endif
+}
+
static void post_type(CType *type, AttributeDef *ad)
{
int n, l, t1, arg_size, align;
@@ -5325,7 +5352,7 @@ ST_FUNC void decl(int l)
Sym *sym;
AttributeDef ad;
- /*
+ /*
* type.ref must be either a valid reference or NULL for external_sym to
* work. As type = btype is executed before external_sym is call, setting
* btype.ref to 0 is enough.