* Sylvain Le Gall: >> byterun/ints.c, function caml_int64_div, the I64_div macro. This is >> expanded into a plain division operator, and that is compiled into a >> run-time library call by GCC. >> > > I64_div is a function defined either in byterun/int64_emul.h o > byterun/int64_native.h. Reading both I64_div, I don't see any specific > GCC usage. > > Could you be more precise ? I must admit I don't understand at all this > issue !
Here's a disassembly of the caml_int64_div function in ocaml 3.10.2 00000e19 <caml_int64_div>: e19: 55 push %ebp e1a: 89 e5 mov %esp,%ebp e1c: 83 ec 18 sub $0x18,%esp e1f: 8b 45 0c mov 0xc(%ebp),%eax e22: 8b 50 08 mov 0x8(%eax),%edx e25: 8b 40 04 mov 0x4(%eax),%eax e28: 89 d1 mov %edx,%ecx e2a: 09 c1 or %eax,%ecx e2c: 75 05 jne e33 <caml_int64_div+0x1a> e2e: e8 fc ff ff ff call e2f <caml_int64_div+0x16> e2f: R_386_PC32 caml_raise_zero_divide e33: 89 44 24 08 mov %eax,0x8(%esp) e37: 89 54 24 0c mov %edx,0xc(%esp) e3b: 8b 4d 08 mov 0x8(%ebp),%ecx e3e: 8b 41 04 mov 0x4(%ecx),%eax e41: 8b 51 08 mov 0x8(%ecx),%edx e44: 89 04 24 mov %eax,(%esp) e47: 89 54 24 04 mov %edx,0x4(%esp) e4b: e8 fc ff ff ff call e4c <caml_int64_div+0x33> e4c: R_386_PC32 __divdi3 e50: 89 04 24 mov %eax,(%esp) e53: 89 54 24 04 mov %edx,0x4(%esp) e57: e8 fc ff ff ff call e58 <caml_int64_div+0x3f> e58: R_386_PC32 caml_copy_int64 e5c: c9 leave e5d: c3 ret The actual division is carried out by calling __divdi3. This function is implemented in the GCC run-time library, and statically linked into the executable. Note that this is just an example. Other, similar issues probably exist on other architectures (particular RISCy ones). -- To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org