Jelajahi Sumber

* fixed the sign handling of i386 fpc_div_int64 helper (Mantis 30166)

git-svn-id: trunk@33753 -
Károly Balogh 9 tahun lalu
induk
melakukan
963c4aa1f8
3 mengubah file dengan 34 tambahan dan 1 penghapusan
  1. 1 0
      .gitattributes
  2. 1 1
      rtl/i386/int64p.inc
  3. 32 0
      tests/webtbs/tw30166.pp

+ 1 - 0
.gitattributes

@@ -15072,6 +15072,7 @@ tests/webtbs/tw3005.pp svneol=native#text/plain
 tests/webtbs/tw30082.pp svneol=native#text/plain
 tests/webtbs/tw3010.pp svneol=native#text/plain
 tests/webtbs/tw3012.pp svneol=native#text/plain
+tests/webtbs/tw30166.pp svneol=native#text/plain
 tests/webtbs/tw3023.pp svneol=native#text/plain
 tests/webtbs/tw3028.pp svneol=native#text/plain
 tests/webtbs/tw3038.pp svneol=native#text/plain

+ 1 - 1
rtl/i386/int64p.inc

@@ -70,7 +70,7 @@
             xchgl %ecx,%eax
             divl %ebx
             movl %ecx,%edx
-            jmp .Lexit
+            jmp .Lmake_sign
 .Lbigdivisor:
             subl $12,%esp
             movl %eax,(%esp)

+ 32 - 0
tests/webtbs/tw30166.pp

@@ -0,0 +1,32 @@
+{ Test against Mantis #30166, an issue in the i386 fpc_div_int64 helper. }
+Uses sysutils;
+
+Var cc, dd: int64;
+    a, b: int64;
+
+Begin
+ dd:=int64($0000000A6BB38805);
+ cc:=int64($0000000000142E04);
+ cc:=cc-2822400; { $FF11813BCCC3B114 }
+ dd:=dd*cc;
+
+{ dd:=int64($FF11813BCCC3B114); }
+
+ a:=dd div int64($00000000002B1100);
+ b:=int64($FF11813BCCC3B114) div int64($00000000002B1100);
+
+ WriteLn(IntToHex(cc,16));
+ WriteLn(IntToHex(dd,16));
+ WriteLn('FF11813BCCC3B114:00000000002B1100='#9, IntToHex(a,16));
+ WriteLn('FF11813BCCC3B114:00000000002B1100='#9, IntToHex(b,16));
+ 
+ if a<>b then
+  begin
+    writeln('Failed!');
+    halt(1);
+  end
+ else
+  begin
+    writeln('Passed!');
+  end;
+End.