Commit 43ef9eb267fc0daade111c35ae945dc95427e3ef

Authored by bellard
1 parent e4cf1adc

use fprintf_func callback to print code


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1435 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 20 additions and 18 deletions
ppc-dis.c
@@ -3067,7 +3067,9 @@ const struct powerpc_macro powerpc_macros[] = { @@ -3067,7 +3067,9 @@ const struct powerpc_macro powerpc_macros[] = {
3067 const int powerpc_num_macros = 3067 const int powerpc_num_macros =
3068 sizeof (powerpc_macros) / sizeof (powerpc_macros[0]); 3068 sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
3069 3069
3070 -static int print_insn_powerpc(FILE *, uint32_t insn, unsigned memaddr, int dialect); 3070 +static int
  3071 +print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
  3072 + int dialect);
3071 3073
3072 /* Print a big endian PowerPC instruction. For convenience, also 3074 /* Print a big endian PowerPC instruction. For convenience, also
3073 disassemble instructions supported by the Motorola PowerPC 601. */ 3075 disassemble instructions supported by the Motorola PowerPC 601. */
@@ -3083,14 +3085,14 @@ int print_insn_ppc (bfd_vma pc, disassemble_info *info) @@ -3083,14 +3085,14 @@ int print_insn_ppc (bfd_vma pc, disassemble_info *info)
3083 opc = bfd_getb32(buf); 3085 opc = bfd_getb32(buf);
3084 else 3086 else
3085 opc = bfd_getl32(buf); 3087 opc = bfd_getl32(buf);
3086 - return print_insn_powerpc (info->stream, opc, pc, 3088 + return print_insn_powerpc (info, opc, pc,
3087 PPC | B32 | M601); 3089 PPC | B32 | M601);
3088 } 3090 }
3089 3091
3090 /* Print a PowerPC or POWER instruction. */ 3092 /* Print a PowerPC or POWER instruction. */
3091 3093
3092 static int 3094 static int
3093 -print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, 3095 +print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3094 int dialect) 3096 int dialect)
3095 { 3097 {
3096 const struct powerpc_opcode *opcode; 3098 const struct powerpc_opcode *opcode;
@@ -3136,9 +3138,9 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, @@ -3136,9 +3138,9 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
3136 continue; 3138 continue;
3137 3139
3138 /* The instruction is valid. */ 3140 /* The instruction is valid. */
3139 - fprintf(out, "%s", opcode->name); 3141 + (*info->fprintf_func)(info->stream, "%s", opcode->name);
3140 if (opcode->operands[0] != 0) 3142 if (opcode->operands[0] != 0)
3141 - fprintf(out, "\t"); 3143 + (*info->fprintf_func)(info->stream, "\t");
3142 3144
3143 /* Now extract and print the operands. */ 3145 /* Now extract and print the operands. */
3144 need_comma = 0; 3146 need_comma = 0;
@@ -3175,26 +3177,26 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, @@ -3175,26 +3177,26 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
3175 3177
3176 if (need_comma) 3178 if (need_comma)
3177 { 3179 {
3178 - fprintf(out, ","); 3180 + (*info->fprintf_func)(info->stream, ",");
3179 need_comma = 0; 3181 need_comma = 0;
3180 } 3182 }
3181 3183
3182 /* Print the operand as directed by the flags. */ 3184 /* Print the operand as directed by the flags. */
3183 if ((operand->flags & PPC_OPERAND_GPR) != 0) 3185 if ((operand->flags & PPC_OPERAND_GPR) != 0)
3184 - fprintf(out, "r%d", value); 3186 + (*info->fprintf_func)(info->stream, "r%d", value);
3185 else if ((operand->flags & PPC_OPERAND_FPR) != 0) 3187 else if ((operand->flags & PPC_OPERAND_FPR) != 0)
3186 - fprintf(out, "f%d", value); 3188 + (*info->fprintf_func)(info->stream, "f%d", value);
3187 else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0) 3189 else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
3188 - fprintf(out, "%08X", memaddr + value); 3190 + (*info->fprintf_func)(info->stream, "%08X", memaddr + value);
3189 else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0) 3191 else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
3190 - fprintf(out, "%08X", value & 0xffffffff); 3192 + (*info->fprintf_func)(info->stream, "%08X", value & 0xffffffff);
3191 else if ((operand->flags & PPC_OPERAND_CR) == 0 3193 else if ((operand->flags & PPC_OPERAND_CR) == 0
3192 || (dialect & PPC_OPCODE_PPC) == 0) 3194 || (dialect & PPC_OPCODE_PPC) == 0)
3193 - fprintf(out, "%d", value); 3195 + (*info->fprintf_func)(info->stream, "%d", value);
3194 else 3196 else
3195 { 3197 {
3196 if (operand->bits == 3) 3198 if (operand->bits == 3)
3197 - fprintf(out, "cr%d", value); 3199 + (*info->fprintf_func)(info->stream, "cr%d", value);
3198 else 3200 else
3199 { 3201 {
3200 static const char *cbnames[4] = { "lt", "gt", "eq", "so" }; 3202 static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
@@ -3203,20 +3205,20 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, @@ -3203,20 +3205,20 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
3203 3205
3204 cr = value >> 2; 3206 cr = value >> 2;
3205 if (cr != 0) 3207 if (cr != 0)
3206 - fprintf(out, "4*cr%d", cr); 3208 + (*info->fprintf_func)(info->stream, "4*cr%d", cr);
3207 cc = value & 3; 3209 cc = value & 3;
3208 if (cc != 0) 3210 if (cc != 0)
3209 { 3211 {
3210 if (cr != 0) 3212 if (cr != 0)
3211 - fprintf(out, "+");  
3212 - fprintf(out, "%s", cbnames[cc]); 3213 + (*info->fprintf_func)(info->stream, "+");
  3214 + (*info->fprintf_func)(info->stream, "%s", cbnames[cc]);
3213 } 3215 }
3214 } 3216 }
3215 } 3217 }
3216 3218
3217 if (need_paren) 3219 if (need_paren)
3218 { 3220 {
3219 - fprintf(out, ")"); 3221 + (*info->fprintf_func)(info->stream, ")");
3220 need_paren = 0; 3222 need_paren = 0;
3221 } 3223 }
3222 3224
@@ -3224,7 +3226,7 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, @@ -3224,7 +3226,7 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
3224 need_comma = 1; 3226 need_comma = 1;
3225 else 3227 else
3226 { 3228 {
3227 - fprintf(out, "("); 3229 + (*info->fprintf_func)(info->stream, "(");
3228 need_paren = 1; 3230 need_paren = 1;
3229 } 3231 }
3230 } 3232 }
@@ -3234,7 +3236,7 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr, @@ -3234,7 +3236,7 @@ print_insn_powerpc (FILE *out, uint32_t insn, unsigned memaddr,
3234 } 3236 }
3235 3237
3236 /* We could not find a match. */ 3238 /* We could not find a match. */
3237 - fprintf(out, ".long 0x%x", insn); 3239 + (*info->fprintf_func)(info->stream, ".long 0x%x", insn);
3238 3240
3239 return 4; 3241 return 4;
3240 } 3242 }