summary refs log tree commit diff stats
path: root/results/classifier/gemma3:12b/device/1843651
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/gemma3:12b/device/1843651')
-rw-r--r--results/classifier/gemma3:12b/device/184365181
1 files changed, 81 insertions, 0 deletions
diff --git a/results/classifier/gemma3:12b/device/1843651 b/results/classifier/gemma3:12b/device/1843651
new file mode 100644
index 000000000..689a82fff
--- /dev/null
+++ b/results/classifier/gemma3:12b/device/1843651
@@ -0,0 +1,81 @@
+
+m68k fpu bug
+
+On gcc123 cfarm machine,
+I was testing m68k executables generated by Free Pascal Compiler.
+
+muller@gcc123:~/pas/check$ cat inf.pp
+function get_double(x : double):double;
+  begin
+    get_double:=x;
+  end;
+
+
+var
+  y : double;
+  py : pbyte;
+  i : byte;
+begin
+  y:=1.0/0.0;
+  py:=@y;
+{$ifdef ENDIAN_LITTLE}
+  write('little endian y=');
+  for i:=7 downto 0 do
+{$else not ENDIAN_LITTLE}
+  write('big endian y=');
+  for i:=0 to 7 do
+{$endif}
+    write(hexstr(py[i],2));
+  writeln;
+  y:=get_double(y)+1;
+{$ifdef ENDIAN_LITTLE}
+  write('little endian y=');
+  for i:=7 downto 0 do
+{$else not ENDIAN_LITTLE}
+  write('big endian y=');
+  for i:=0 to 7 do
+{$endif}
+    write(hexstr(py[i],2));
+  writeln;
+end.
+muller@gcc123:~/pas/check$ ppc68k inf
+Free Pascal Compiler version 3.3.1-r20:42973M [2019/09/11] for m68k
+Copyright (c) 1993-2019 by Florian Klaempfl and others
+Target OS: Linux for m68k
+Compiling inf.pp
+Assembling program
+Linking inf
+33 lines compiled, 0.1 sec
+muller@gcc123:~/pas/check$ ./inf
+big endian y=7FF0000000000000
+big endian y=7FFFFFFFFFFFFFFF
+muller@gcc123:~/pas/check$ qemu-m68k ./inf
+big endian y=7FF0000000000000
+big endian y=7FFFFFFFFFFFFFFF
+muller@gcc123:~/pas/check$ ~/sys-root/bin/qemu-m68k ./inf
+qemu-m68k        qemu-m68k-fixed
+muller@gcc123:~/pas/check$ ~/sys-root/bin/qemu-m68k-fixed ./inf
+big endian y=7FF0000000000000
+big endian y=7FF0000000000000
+
+~/sys-root/bin/qemu-m68k  is 4.1.0 release,
+~/sys-root/bin/qemu-m68k-fixed is the same source with a unique change:
+
+gnu/qemu/qemu-4.1.0/fpu/softfloat-specialize.h:214:#if defined(TARGET_M68K)
+gnu/qemu/qemu-4.1.0/fpu/softfloat-specialize.h-215-#define floatx80_infinity_low  LIT64(0x0000000000000000)
+gnu/qemu/qemu-4.1.0/fpu/softfloat-specialize.h-216-#else
+gnu/qemu/qemu-4.1.0/fpu/softfloat-specialize.h-217-#define floatx80_infinity_low  LIT64(0x8000000000000000)
+gnu/qemu/qemu-4.1.0/fpu/softfloat-specialize.h-218-#endif
+
+the M68K branch value is set to the same value as the other branch.
+
+The problem of the M68K specific floatx86_infinity_low values
+is that is enters in conflict with
+muller@gcc123:~/pas/check$ grep -nA6 invalid_enc  /home/muller/gnu/qemu/qemu-4.1.0/include/fpu/softfloat.h
+752:static inline bool floatx80_invalid_encoding(floatx80 a)
+753-{
+754-    return (a.low & (1ULL << 63)) == 0 && (a.high & 0x7FFF) != 0;
+755-}
+
+And thus the m68k variant of floatx80 representing +Infinity is
+considered as an invalid encoding, and thus converted into a NaN 7FFFFFFFFFFFFFFF
\ No newline at end of file