From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KNfwt-0003UC-TY for qemu-devel@nongnu.org; Mon, 28 Jul 2008 23:32:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KNfws-0003TI-6p for qemu-devel@nongnu.org; Mon, 28 Jul 2008 23:32:31 -0400 Received: from [199.232.76.173] (port=44089 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KNfws-0003TC-3I for qemu-devel@nongnu.org; Mon, 28 Jul 2008 23:32:30 -0400 Received: from csl.cornell.edu ([128.84.224.10]:2611 helo=vlsi.csl.cornell.edu) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KNfwr-0002xI-Hu for qemu-devel@nongnu.org; Mon, 28 Jul 2008 23:32:30 -0400 Received: from stanley.csl.cornell.edu (stanley.csl.cornell.edu [128.84.224.15]) by vlsi.csl.cornell.edu (8.13.4/8.13.4) with ESMTP id m6T3WFmw039531 for ; Mon, 28 Jul 2008 23:32:20 -0400 (EDT) Date: Mon, 28 Jul 2008 23:32:15 -0400 (EDT) From: Vince Weaver Message-ID: <20080728225136.C26546@stanley.csl.cornell.edu> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-306029950-1217302335=:26546" Subject: [Qemu-devel] x86 tcg problem Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --0-306029950-1217302335=:26546 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Hello I've spent a day now trying to figure out why bzip2 compress/decompress doesn't work when using sparc32plus-linux-user on x86. I've tracked the problem to the Zero flag being improperly set (attached is a small exe/src that reproduces the problem.. it reports "Greater" on real hardware, "Less Than" on qemu current). The issue seems to be a misordering of an x86 sub instruction. I tried to track this down in the tcg code but I quickly got lost. The code does this for a compare (on sparc the compare turns into a subtract with result as the [ignores] zero reg): mov_i32 cc_src_0,g4_0 ; mov_i32 cc_src_1,g4_1 ; load g4 (0xaae60) mov_i32 cc_src2_0,g3_0 ; mov_i32 cc_src2_1,g3_1 ; load g3 (0) sub2_i32 cc_dst_0,cc_dst_1,cc_src2_0,cc_src2_1,cc_src_0,cc_src_1 ; result = 0xaafe0-0 movi_i32 psr,$0x0 ; clear psr mov_i32 tmp42,cc_dst_0 ; get cc_dst_0 movi_i32 tmp43,$0x0 ; movi_i32 tmp44,$0x0 ; movi_i32 tmp45,$0x0 ; zero extends brcond2_i32 tmp42,tmp43,tmp44,tmp45,$0x1,$0x0 ; if not zero, skip movi_i32 tmp19,$0x400000 ; else set zero flag which converts into x86: 0xb80da04d: sub %ecx,%eax ; %ecx = g4-g3 0xb80da04f: sbb %ebx,%edx 0xb80da051: mov %eax,0x6c(%ebp) ; saving g3, not the result (ecx)! 0xb80da054: mov %edx,0x70(%ebp) ; 0xb80da057: xor %edx,%edx 0xb80da059: xor %ecx,%ecx ; clearing our result for use as psr ; result is lost! ; the later test for zero is done ; against g3 instead, which ; sets the zero flag when it ... ; shouldn't 0xb80da06f: test %eax,%eax 0xb80da071: jne 0xb80da091 ; skip if not zero .. 0xb80da07f: mov 0x8c(%ebp),%eax ; load psr 0xb80da085: or $0x400000,%eax ; set zero flag So unless there's some weird AT&T/intel ordering thing that is confusing me (please let me know if I am missing something), TCG is getting confused about which argument of the subtract is the result. I'm not sure how to fix this though... Thanks for any help Vince --0-306029950-1217302335=:26546 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=cmp_test.s Content-Transfer-Encoding: BASE64 Content-ID: <20080728233215.K26546@stanley.csl.cornell.edu> Content-Description: Content-Disposition: attachment; filename=cmp_test.s ISAgICAgKyBTeXNjYWxscyBoYXZlIG51bWJlciBpbiAlZzEsIG9wdGlvbnMg aW4gJW8wLCVvMSwuLi4NCiEJUmVzdWx0IHJldHVybmVkIGluICVvMA0KIQlM aW51eCBzeXNjYWxsIGlzIGNhbGxlZCBieSAidGEgMHgxMCINCg0KLmVxdSBT WVNDQUxMX0VYSVQsMQkNCi5lcXUgU1lTQ0FMTF9XUklURSw0DQoNCi5lcXUg U1RET1VULDENCg0KCS5nbG9ibCBfc3RhcnQNCl9zdGFydDoNCiAgICAgICBz ZXQJZGF0YV9yZWdpb24sJWkwDQogICAgICAgc2V0CTB4YWU2MCwlZzQNCiAg ICAgICBsZAlbICVpMCArIDB4NCBdLCAlZzMNCiAgICAgICBpbmMJJWczDQog ICAgICAgDQogICAgICAgY21wCSVnNCwlZzMNCiAgICAgICBibGUJbGVzc19l cXVhbA0KICAgICAgIG5vcA0KICAgICAgIGJhCWdyZWF0ZXINCiAgICAgICBu b3ANCiAgICAgICANCmxlc3NfZXF1YWw6DQogICAgICAgc2V0CWxlc3NlcXVh bF9zdHJpbmcsJW8xDQogICAgICAgYmEJd3JpdGVfc3Rkb3V0DQogICAgICAg bm9wDQoNCmdyZWF0ZXI6DQogICAgICAgc2V0CWdyZWF0ZXJfc3RyaW5nLCVv MQ0KICAgICAgIA0KCSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KCSMgV1JJVEVfU1RET1VUDQoJIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQoJIyAlbzEgaGFzIHN0cmluZw0KDQp3cml0ZV9zdGRvdXQ6 DQoNCglzZXQJU1lTQ0FMTF9XUklURSwlZzEJISBXcml0ZSBzeXNjYWxsIGlu ICVnMQ0KCXNldAlTVERPVVQsJW8wCQkhIDEgaW4gJW8wIChzdGRvdXQpDQoJ c2V0CTAsJW8yCQkJISAwIChjb3VudCkgaW4gJW8yDQoNCnN0cl9sb29wMToN CglsZHViCVslbzErJW8yXSwlbDAJCSEgbG9hZCBieXRlDQoJY21wCSVsMCwl ZzAJCQkhIGNvbXBhcmUgYWdhaW5zdCB6ZXJvDQoJYm56CXN0cl9sb29wMQkJ ISBpZiBub3QgbnVsLCByZXBlYXQNCgkjIEJSQU5DSCBERUxBWSBTTE9UDQoJ aW5jCSVvMgkJCSEgaW5jcmVtZW50IGNvdW50DQoNCglkZWMJJW8yCQkJISBj b3JyZWN0IGNvdW50CQ0KCXRhCTB4MTAJCQkhIHJ1biB0aGUgc3lzY2FsbA0K DQpleGl0OgkJDQogICAgICAgIG1vdgkwLCVvMAkJCSEgZXhpdCB2YWx1ZQ0K ICAgICAgICBtb3YJU1lTQ0FMTF9FWElULCVnMSAgICAgICAgISBwdXQgdGhl IGV4aXQgc3lzY2FsbCBudW1iZXIgaW4gZzENCiAgICAgICAgdGEgICAgICAw eDEwCQkJISBhbmQgZXhpdA0KDQoNCg0KDQohPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQouZGF0YQ0KIT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KDQpkYXRhX3JlZ2lvbjoJCS5pbnQgLTEsLTENCmdyZWF0ZXJf c3RyaW5nOgkJLmFzY2lpICAiR3JlYXRlclxuXDAiDQpsZXNzZXF1YWxfc3Ry aW5nOgkuYXNjaWkgICJMZXNzIEVxdWFsXG5cMCINCg== --0-306029950-1217302335=:26546 Content-Type: APPLICATION/octet-stream; name=cmp_test Content-Transfer-Encoding: BASE64 Content-ID: <20080728233215.S26546@stanley.csl.cornell.edu> Content-Description: Content-Disposition: attachment; filename=cmp_test f0VMRgECAQAAAAAAAAAAAAACAAIAAAABAAEAdAAAADQAAAEsAAAAAAA0ACAA AgAoAAYAAwAAAAEAAAAAAAEAAAABAAAAAADoAAAA6AAAAAUAAQAAAAAAAQAA AOgAAgDoAAIA6AAAAB0AAAAdAAAABgABAAAxAACAsBYg6AkAACuIESJgxgYg BIYA4AGAoQADBIAABAEAAAAQgAAGAQAAABMAAICSEmD5EIAABAEAAAATAACA khJg8IIQIASQECABlBAgAOAKQAqApAAAEr///pQCoAGUIqABkdAgEJAQIACC ECABkdAgEP//////////R3JlYXRlcgoATGVzcyBFcXVhbAoAAC5zeW10YWIA LnN0cnRhYgAuc2hzdHJ0YWIALnRleHQALmRhdGEAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAABAAAABgABAHQAAAB0 AAAAdAAAAAAAAAAAAAAAAQAAAAAAAAAhAAAAAQAAAAMAAgDoAAAA6AAAAB0A AAAAAAAAAAAAAAEAAAAAAAAAEQAAAAMAAAAAAAAAAAAAAQUAAAAnAAAAAAAA AAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAIcAAABIAAAAAUAAAAOAAAA BAAAABAAAAAJAAAAAwAAAAAAAAAAAAADPAAAAJ0AAAAAAAAAAAAAAAEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQB0AAAAAAMAAAEAAAAAAAIA6AAAAAAD AAACAAAAAQAAAAEAAAAAAAD/8QAAAA4AAAAEAAAAAAAA//EAAAAcAAAAAQAA AAAAAP/xAAAAIwACAOgAAAAAAAAAAgAAAC8AAQCgAAAAAAAAAAEAAAA6AAEA sAAAAAAAAAABAAAAQgACAPkAAAAAAAAAAgAAAFMAAQC4AAAAAAAAAAEAAABg AAIA8AAAAAAAAAACAAAAbwABAMQAAAAAAAAAAQAAAHkAAQDcAAAAAAAAAAEA AAB+AAEAdAAAAAAQAAABAAAAhQACAQUAAAAAEAD/8QAAAJEAAgEFAAAAABAA //EAAACYAAIBCAAAAAAQAP/xAFNZU0NBTExfRVhJVABTWVNDQUxMX1dSSVRF AFNURE9VVABkYXRhX3JlZ2lvbgBsZXNzX2VxdWFsAGdyZWF0ZXIAbGVzc2Vx dWFsX3N0cmluZwB3cml0ZV9zdGRvdXQAZ3JlYXRlcl9zdHJpbmcAc3RyX2xv b3AxAGV4aXQAX3N0YXJ0AF9fYnNzX3N0YXJ0AF9lZGF0YQBfZW5kAA== --0-306029950-1217302335=:26546--