mirror of
https://github.com/mirror/tinycc.git
synced 2025-02-10 06:50:10 +08:00
x86-asm: move stats code
The old place (tccasm.c) didn't have access to the variables anymore and was ifdefed out. Move it to i386-asm.c.
This commit is contained in:
parent
ed35ac841b
commit
4af6e087dd
40
i386-asm.c
40
i386-asm.c
@ -504,6 +504,45 @@ static inline int asm_modrm(int reg, Operand *op)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void maybe_print_stats (void)
|
||||||
|
{
|
||||||
|
static int already = 1;
|
||||||
|
if (!already)
|
||||||
|
/* print stats about opcodes */
|
||||||
|
{
|
||||||
|
const struct ASMInstr *pa;
|
||||||
|
int freq[4];
|
||||||
|
int op_vals[500];
|
||||||
|
int nb_op_vals, i, j;
|
||||||
|
|
||||||
|
already = 1;
|
||||||
|
nb_op_vals = 0;
|
||||||
|
memset(freq, 0, sizeof(freq));
|
||||||
|
for(pa = asm_instrs; pa->sym != 0; pa++) {
|
||||||
|
freq[pa->nb_ops]++;
|
||||||
|
//for(i=0;i<pa->nb_ops;i++) {
|
||||||
|
for(j=0;j<nb_op_vals;j++) {
|
||||||
|
//if (pa->op_type[i] == op_vals[j])
|
||||||
|
if (pa->instr_type == op_vals[j])
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
//op_vals[nb_op_vals++] = pa->op_type[i];
|
||||||
|
op_vals[nb_op_vals++] = pa->instr_type;
|
||||||
|
found: ;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
for(i=0;i<nb_op_vals;i++) {
|
||||||
|
int v = op_vals[i];
|
||||||
|
//if ((v & (v - 1)) != 0)
|
||||||
|
printf("%3d: %08x\n", i, v);
|
||||||
|
}
|
||||||
|
printf("size=%d nb=%d f0=%d f1=%d f2=%d f3=%d\n",
|
||||||
|
(int)sizeof(asm_instrs),
|
||||||
|
(int)sizeof(asm_instrs) / (int)sizeof(ASMInstr),
|
||||||
|
freq[0], freq[1], freq[2], freq[3]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
||||||
{
|
{
|
||||||
const ASMInstr *pa;
|
const ASMInstr *pa;
|
||||||
@ -515,6 +554,7 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
|||||||
int autosize;
|
int autosize;
|
||||||
int p66;
|
int p66;
|
||||||
|
|
||||||
|
maybe_print_stats();
|
||||||
/* force synthetic ';' after prefix instruction, so we can handle */
|
/* force synthetic ';' after prefix instruction, so we can handle */
|
||||||
/* one-line things like "rep stosb" instead of only "rep\nstosb" */
|
/* one-line things like "rep stosb" instead of only "rep\nstosb" */
|
||||||
if (opcode >= TOK_ASM_wait && opcode <= TOK_ASM_repnz)
|
if (opcode >= TOK_ASM_wait && opcode <= TOK_ASM_repnz)
|
||||||
|
32
tccasm.c
32
tccasm.c
@ -757,38 +757,6 @@ static int tcc_assemble_internal(TCCState *s1, int do_preprocess)
|
|||||||
{
|
{
|
||||||
int opcode;
|
int opcode;
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* print stats about opcodes */
|
|
||||||
{
|
|
||||||
const ASMInstr *pa;
|
|
||||||
int freq[4];
|
|
||||||
int op_vals[500];
|
|
||||||
int nb_op_vals, i, j;
|
|
||||||
|
|
||||||
nb_op_vals = 0;
|
|
||||||
memset(freq, 0, sizeof(freq));
|
|
||||||
for(pa = asm_instrs; pa->sym != 0; pa++) {
|
|
||||||
freq[pa->nb_ops]++;
|
|
||||||
for(i=0;i<pa->nb_ops;i++) {
|
|
||||||
for(j=0;j<nb_op_vals;j++) {
|
|
||||||
if (pa->op_type[i] == op_vals[j])
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
op_vals[nb_op_vals++] = pa->op_type[i];
|
|
||||||
found: ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(i=0;i<nb_op_vals;i++) {
|
|
||||||
int v = op_vals[i];
|
|
||||||
if ((v & (v - 1)) != 0)
|
|
||||||
printf("%3d: %08x\n", i, v);
|
|
||||||
}
|
|
||||||
printf("size=%d nb=%d f0=%d f1=%d f2=%d f3=%d\n",
|
|
||||||
sizeof(asm_instrs), sizeof(asm_instrs) / sizeof(ASMInstr),
|
|
||||||
freq[0], freq[1], freq[2], freq[3]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* XXX: undefine C labels */
|
/* XXX: undefine C labels */
|
||||||
|
|
||||||
ch = file->buf_ptr[0];
|
ch = file->buf_ptr[0];
|
||||||
|
Loading…
Reference in New Issue
Block a user