Hex Artifact Content
Not logged in

Artifact 4211975a27a758c60bcd5ce9da6986239f4bdc7c:


0000: 2f 2f 20 54 68 69 73 20 66 69 6c 65 20 69 73 20  // This file is 
0010: 64 75 61 6c 20 6c 69 63 65 6e 73 65 64 20 75 6e  dual licensed un
0020: 64 65 72 20 74 68 65 20 4d 49 54 20 61 6e 64 20  der the MIT and 
0030: 74 68 65 20 55 6e 69 76 65 72 73 69 74 79 20 6f  the University o
0040: 66 20 49 6c 6c 69 6e 6f 69 73 20 4f 70 65 6e 0a  f Illinois Open.
0050: 2f 2f 20 53 6f 75 72 63 65 20 4c 69 63 65 6e 73  // Source Licens
0060: 65 73 2e 20 53 65 65 20 4c 49 43 45 4e 53 45 2e  es. See LICENSE.
0070: 54 58 54 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  TXT for details.
0080: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 61  ..#include "../a
0090: 73 73 65 6d 62 6c 79 2e 68 22 0a 0a 2f 2f 20 66  ssembly.h"..// f
00a0: 6c 6f 61 74 20 5f 5f 66 6c 6f 61 74 64 69 73 66  loat __floatdisf
00b0: 28 64 69 5f 69 6e 74 20 61 29 3b 0a 0a 2f 2f 20  (di_int a);..// 
00c0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73  This routine has
00d0: 20 73 6f 6d 65 20 65 78 74 72 61 20 6d 65 6d 6f   some extra memo
00e0: 72 79 20 74 72 61 66 66 69 63 2c 20 6c 6f 61 64  ry traffic, load
00f0: 69 6e 67 20 74 68 65 20 36 34 2d 62 69 74 20 69  ing the 64-bit i
0100: 6e 70 75 74 20 76 69 61 20 74 77 6f 0a 2f 2f 20  nput via two.// 
0110: 33 32 2d 62 69 74 20 6c 6f 61 64 73 2c 20 74 68  32-bit loads, th
0120: 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 73  en immediately s
0130: 74 6f 72 69 6e 67 20 69 74 20 62 61 63 6b 20 74  toring it back t
0140: 6f 20 74 68 65 20 73 74 61 63 6b 20 76 69 61 20  o the stack via 
0150: 61 20 73 69 6e 67 6c 65 20 36 34 2d 62 69 74 0a  a single 64-bit.
0160: 2f 2f 20 73 74 6f 72 65 2e 20 20 54 68 69 73 20  // store.  This 
0170: 69 73 20 74 6f 20 61 76 6f 69 64 20 61 20 77 72  is to avoid a wr
0180: 69 74 65 2d 73 6d 61 6c 6c 2c 20 72 65 61 64 2d  ite-small, read-
0190: 6c 61 72 67 65 20 73 74 61 6c 6c 2e 0a 2f 2f 20  large stall..// 
01a0: 48 6f 77 65 76 65 72 2c 20 69 66 20 63 61 6c 6c  However, if call
01b0: 65 72 73 20 6f 66 20 74 68 69 73 20 72 6f 75 74  ers of this rout
01c0: 69 6e 65 20 63 61 6e 20 62 65 20 73 61 66 65 6c  ine can be safel
01d0: 79 20 61 73 73 75 6d 65 64 20 74 6f 20 73 74 6f  y assumed to sto
01e0: 72 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a  re the argument.
01f0: 2f 2f 20 76 69 61 20 61 20 36 34 2d 62 74 20 73  // via a 64-bt s
0200: 74 6f 72 65 2c 20 74 68 69 73 20 69 73 20 75 6e  tore, this is un
0210: 6e 65 63 65 73 73 61 72 79 20 6d 65 6d 6f 72 79  necessary memory
0220: 20 74 72 61 66 66 69 63 2c 20 61 6e 64 20 73 68   traffic, and sh
0230: 6f 75 6c 64 20 62 65 20 61 76 6f 69 64 65 64 2e  ould be avoided.
0240: 0a 2f 2f 20 49 74 20 63 61 6e 20 62 65 20 74 75  .// It can be tu
0250: 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66 69  rned off by defi
0260: 6e 69 6e 67 20 74 68 65 20 54 52 55 53 54 5f 43  ning the TRUST_C
0270: 41 4c 4c 45 52 53 5f 55 53 45 5f 36 34 5f 42 49  ALLERS_USE_64_BI
0280: 54 5f 53 54 4f 52 45 53 20 6d 61 63 72 6f 2e 0a  T_STORES macro..
0290: 0a 23 69 66 64 65 66 20 5f 5f 69 33 38 36 5f 5f  .#ifdef __i386__
02a0: 0a 0a 2e 74 65 78 74 0a 2e 62 61 6c 69 67 6e 20  ...text..balign 
02b0: 34 0a 44 45 46 49 4e 45 5f 43 4f 4d 50 49 4c 45  4.DEFINE_COMPILE
02c0: 52 52 54 5f 46 55 4e 43 54 49 4f 4e 28 5f 5f 66  RRT_FUNCTION(__f
02d0: 6c 6f 61 74 64 69 73 66 29 0a 23 69 66 6e 64 65  loatdisf).#ifnde
02e0: 66 20 54 52 55 53 54 5f 43 41 4c 4c 45 52 53 5f  f TRUST_CALLERS_
02f0: 55 53 45 5f 36 34 5f 42 49 54 5f 53 54 4f 52 45  USE_64_BIT_STORE
0300: 53 0a 09 6d 6f 76 64 09 09 34 28 25 65 73 70 29  S..movd..4(%esp)
0310: 2c 09 25 78 6d 6d 30 0a 09 6d 6f 76 64 09 09 38  ,.%xmm0..movd..8
0320: 28 25 65 73 70 29 2c 09 25 78 6d 6d 31 0a 09 70  (%esp),.%xmm1..p
0330: 75 6e 70 63 6b 6c 64 71 09 25 78 6d 6d 31 2c 09  unpckldq.%xmm1,.
0340: 09 25 78 6d 6d 30 0a 09 6d 6f 76 71 09 09 25 78  .%xmm0..movq..%x
0350: 6d 6d 30 2c 09 09 34 28 25 65 73 70 29 0a 23 65  mm0,..4(%esp).#e
0360: 6e 64 69 66 0a 09 66 69 6c 64 6c 6c 09 09 34 28  ndif..fildll..4(
0370: 25 65 73 70 29 0a 09 66 73 74 70 73 09 09 34 28  %esp)..fstps..4(
0380: 25 65 73 70 29 0a 09 66 6c 64 73 09 09 34 28 25  %esp)..flds..4(%
0390: 65 73 70 29 0a 09 72 65 74 0a 45 4e 44 5f 43 4f  esp)..ret.END_CO
03a0: 4d 50 49 4c 45 52 52 54 5f 46 55 4e 43 54 49 4f  MPILERRT_FUNCTIO
03b0: 4e 28 5f 5f 66 6c 6f 61 74 64 69 73 66 29 0a 0a  N(__floatdisf)..
03c0: 23 65 6e 64 69 66 20 2f 2f 20 5f 5f 69 33 38 36  #endif // __i386
03d0: 5f 5f 0a 0a 4e 4f 5f 45 58 45 43 5f 53 54 41 43  __..NO_EXEC_STAC
03e0: 4b 5f 44 49 52 45 43 54 49 56 45 0a 0a           K_DIRECTIVE..