All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] MAX_OP_PER_INSTR should be larger
@ 2009-03-18  6:17 TeLeMan
  0 siblings, 0 replies; only message in thread
From: TeLeMan @ 2009-03-18  6:17 UTC (permalink / raw)
  To: qemu-devel


MAX_OP_PER_INSTR is 64 now,but the x64 instruction "ROR" will be translated
into more than 64 ops.
It will cause gen_opc_buf overflowed and tcg_ctx overwritten.

qemu.log:

IN: 
0x00000000004463d3:  and    %ecx,%ebx
0x00000000004463d5:  add    %edi,%esi
0x00000000004463d7:  mov    %esi,-0x14(%ebp)
0x00000000004463da:  mov    %ecx,%esi
0x00000000004463dc:  ror    $0x19,%esi
0x00000000004463df:  mov    %ecx,%edi
0x00000000004463e1:  ror    $0xb,%edi
0x00000000004463e4:  xor    %edi,%esi
0x00000000004463e6:  mov    %ecx,%edi
0x00000000004463e8:  ror    $0x6,%edi
0x00000000004463eb:  xor    %edi,%esi
0x00000000004463ed:  mov    %ecx,%edi
0x00000000004463ef:  not    %edi
0x00000000004463f1:  and    -0x28(%ebp),%edi
0x00000000004463f4:  xor    %ebx,%edi
0x00000000004463f6:  add    %edi,%esi
0x00000000004463f8:  add    0x501280(,%eax,4),%esi
0x00000000004463ff:  mov    -0x14(%ebp),%edi
0x0000000000446402:  add    -0x70(%ebp,%eax,4),%esi

OP:
 ---- 0x4463d3
 ld_i32 tmp2,env,$0x8
 ld_i32 tmp3,env,$0xc
 ld_i32 tmp0,env,$0x18
 ld_i32 tmp1,env,$0x1c
 and_i32 tmp0,tmp0,tmp2
 and_i32 tmp1,tmp1,tmp3
 st_i32 tmp0,env,$0x18
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x1c
 discard cc_src_0
 discard cc_src_1
 mov_i32 cc_dst_0,tmp0
 mov_i32 cc_dst_1,tmp1

 ---- 0x4463d5
 ld_i32 tmp2,env,$0x38
 ld_i32 tmp3,env,$0x3c
 ld_i32 tmp0,env,$0x30
 ld_i32 tmp1,env,$0x34
 add2_i32 tmp0,tmp1,tmp0,tmp1,tmp2,tmp3
 st_i32 tmp0,env,$0x30
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x34
 mov_i32 cc_src_0,tmp2
 mov_i32 cc_src_1,tmp3
 mov_i32 cc_dst_0,tmp0
 mov_i32 cc_dst_1,tmp1

 ---- 0x4463d7
 ld_i32 tmp4,env,$0x28
 movi_i32 tmp5,$0x0
 movi_i32 tmp22,$0xffffffec
 movi_i32 tmp23,$0xffffffff
 add2_i32 tmp4,tmp5,tmp4,tmp5,tmp22,tmp23
 movi_i32 tmp5,$0x0
 ld_i32 tmp0,env,$0x30
 ld_i32 tmp1,env,$0x34
 qemu_st32 tmp0,tmp4,tmp5,$0x0

 ---- 0x4463da
 ld_i32 tmp0,env,$0x8
 ld_i32 tmp1,env,$0xc
 st_i32 tmp0,env,$0x30
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x34

 ---- 0x4463dc
 movi_i32 tmp2,$0x19
 movi_i32 tmp3,$0x0
 ld_i32 loc24,env,$0x30
 ld_i32 loc25,env,$0x34
 mov_i32 loc26,tmp2
 mov_i32 loc27,tmp3
 movi_i32 tmp32,$0x1f
 and_i32 loc26,loc26,tmp32
 movi_i32 loc27,$0x0
 movi_i32 tmp22,$0x0
 movi_i32 tmp23,$0x0
 brcond2_i32 loc26,loc27,tmp22,tmp23,eq,$0x0
 mov_i32 tmp8,loc26
 mov_i32 tmp9,loc27
 movi_i32 loc25,$0x0
 mov_i32 loc28,loc24
 mov_i32 loc29,loc25
 movi_i32 tmp32,$0x54d17c
 call tmp32,$0x0,$2,tmp14,tmp15,loc24,loc25,tmp8,tmp9
 movi_i32 tmp22,$0x20
 movi_i32 tmp23,$0x0
 sub2_i32 tmp8,tmp9,tmp22,tmp23,tmp8,tmp9
 movi_i32 tmp32,$0x54d160
 call tmp32,$0x0,$2,loc24,loc25,loc24,loc25,tmp8,tmp9
 or_i32 loc24,loc24,tmp14
 or_i32 loc25,loc25,tmp15
 set_label $0x0
 st_i32 loc24,env,$0x30
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x34
 movi_i32 cc_op,$0x8
 movi_i32 tmp33,$0x0
 movi_i32 tmp34,$0x0
 brcond2_i32 loc26,loc27,tmp33,tmp34,eq,$0x1
 movi_i32 tmp32,$cc_compute_all
 call tmp32,$0x10,$1,tmp12,cc_op
 mov_i32 cc_src_0,tmp12
 movi_i32 cc_src_1,$0x0
 movi_i32 tmp32,$0xfffff7fe
 and_i32 cc_src_0,cc_src_0,tmp32
 xor_i32 tmp8,loc28,loc24
 xor_i32 tmp9,loc29,loc25
 movi_i32 tmp36,$0xc
 shl_i32 tmp32,tmp9,tmp36
 movi_i32 tmp36,$0x14
 shr_i32 tmp35,tmp9,tmp36
 movi_i32 tmp36,$0x14
 shr_i32 tmp8,tmp8,tmp36
 or_i32 tmp8,tmp8,tmp32
 mov_i32 tmp9,tmp35
 movi_i32 tmp35,$0x800
 and_i32 tmp8,tmp8,tmp35
 movi_i32 tmp9,$0x0
 or_i32 cc_src_0,cc_src_0,tmp8
 or_i32 cc_src_1,cc_src_1,tmp9
 movi_i32 tmp36,$0x1
 shl_i32 tmp35,loc25,tmp36
 movi_i32 tmp36,$0x1f
 shr_i32 tmp32,loc25,tmp36
 movi_i32 tmp36,$0x1f
 shr_i32 loc24,loc24,tmp36
 or_i32 loc24,loc24,tmp35
 mov_i32 loc25,tmp32
 movi_i32 tmp32,$0x1
 and_i32 loc24,loc24,tmp32
 movi_i32 loc25,$0x0
 or_i32 cc_src_0,cc_src_0,loc24
 or_i32 cc_src_1,cc_src_1,loc25
 discard cc_dst_0
 discard cc_dst_1
 movi_i32 cc_op,$0x1
 set_label $0x1

 ---- 0x4463df
 ld_i32 tmp0,env,$0x8
 ld_i32 tmp1,env,$0xc
 st_i32 tmp0,env,$0x38
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x3c

 ---- 0x4463e1
 movi_i32 tmp2,$0xb
 movi_i32 tmp3,$0x0
 ld_i32 loc30,env,$0x38
 ld_i32 loc31,env,$0x3c
 mov_i32 loc28,tmp2
 mov_i32 loc29,tmp3
 movi_i32 tmp32,$0x1f
 and_i32 loc28,loc28,tmp32
 movi_i32 loc29,$0x0
 movi_i32 tmp33,$0x0
 movi_i32 tmp34,$0x0
 brcond2_i32 loc28,loc29,tmp33,tmp34,eq,$0x2
 mov_i32 tmp8,loc28
 mov_i32 tmp9,loc29
 movi_i32 loc31,$0x0
 mov_i32 loc26,loc30
 mov_i32 loc27,loc31
 movi_i32 tmp32,$0x54d17c
 call tmp32,$0x0,$2,tmp14,tmp15,loc30,loc31,tmp8,tmp9
 movi_i32 tmp33,$0x20
 movi_i32 tmp34,$0x0
 sub2_i32 tmp8,tmp9,tmp33,tmp34,tmp8,tmp9
 movi_i32 tmp32,$0x54d160
 call tmp32,$0x0,$2,loc30,loc31,loc30,loc31,tmp8,tmp9
 or_i32 loc30,loc30,tmp14
 or_i32 loc31,loc31,tmp15
 set_label $0x2
 st_i32 loc30,env,$0x38
 movi_i32 tmp8,$0x0
 movi_i32 tmp9,$0x0
 st_i32 tmp8,env,$0x3c
 movi_i32 tmp37,$0x0
 movi_i32 tmp38,$0x0
 brcond2_i32 loc28,loc29,tmp37,tmp38,eq,$0x3
 movi_i32 tmp32,$cc_compute_all
 call tmp32,$0x10,$1,tmp12,cc_op
 mov_i32 cc_src_0,tmp12
 movi_i32 cc_src_1,$0x0
 movi_i32 tmp32,$0xfffff7fe
 and_i32 cc_src_0,cc_src_0,tmp32
 xor_i32 tmp8,loc26,loc30
 xor_i32 tmp9,loc27,loc31
 movi_i32 tmp36,$0xc
 shl_i32 tmp32,tmp9,tmp36
 movi_i32 tmp36,$0x14
 shr_i32 tmp35,tmp9,tmp36
 movi_i32 tmp36,$0x14
 shr_i32 tmp8,tmp8,tmp36
 or_i32 tmp8,tmp8,tmp32
 mov_i32 tmp9,tmp35
 movi_i32 tmp35,$0x800
 and_i32 tmp8,tmp8,tmp35
 movi_i32 tmp9,$0x0
 or_i32 cc_src_0,cc_src_0,tmp8
 or_i32 cc_src_1,cc_src_1,tmp9
 movi_i32 tmp36,$0x1
 shl_i32 tmp35,loc31,tmp36
 movi_i32 tmp36,$0x1f
 shr_i32 tmp32,loc31,tmp36
 movi_i32 tmp36,$0x1f
 shr_i32 loc30,loc30,tmp36
 or_i32 loc30,loc30,tmp35
 mov_i32 loc31,tmp32
 movi_i32 tmp32,$0x1
 and_i32 loc30,loc30,tmp32
 movi_i32 loc31,$0x0
 or_i32 cc_src_0,cc_src_0,loc30
 or_i32 cc_src_1,cc_src_1,loc31
 discard cc_dst_0
 discard cc_dst_1
 movi_i32 cc_op,$0x1
 set_label $0x3
-- 
View this message in context: http://www.nabble.com/MAX_OP_PER_INSTR-should-be-larger-tp22573338p22573338.html
Sent from the QEMU - Dev mailing list archive at Nabble.com.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-03-18  6:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-18  6:17 [Qemu-devel] MAX_OP_PER_INSTR should be larger TeLeMan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.