0001-Makefile-for-cross-compile-SoftFloat.patch 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. From 99b62670d01c6081d883303722726beb65699cbb Mon Sep 17 00:00:00 2001
  2. From: Zong Li <zong.li@sifive.com>
  3. Date: Wed, 6 May 2020 01:23:22 -0700
  4. Subject: [PATCH] Makefile for cross compile SoftFloat 3e
  5. This commit adds a Makefile for cross compile on SoftFloat
  6. 3e version. Almost implementation is based on meta-oe porting
  7. from Fabio Berton <fabio.berton@ossystems.com.br>.
  8. Signed-off-by: Zong Li <zongbox@gmail.com>
  9. ---
  10. SoftFloat-3e/build/Linux-Cross-Compile/Makefile | 325 ++++++++++++++++++++++
  11. SoftFloat-3e/build/Linux-Cross-Compile/platform.h | 52 ++++
  12. 2 files changed, 377 insertions(+)
  13. create mode 100644 SoftFloat-3e/build/Linux-Cross-Compile/Makefile
  14. create mode 100644 SoftFloat-3e/build/Linux-Cross-Compile/platform.h
  15. diff --git a/SoftFloat-3e/build/Linux-Cross-Compile/Makefile b/SoftFloat-3e/build/Linux-Cross-Compile/Makefile
  16. new file mode 100644
  17. index 0000000..4da4bc9
  18. --- /dev/null
  19. +++ b/SoftFloat-3e/build/Linux-Cross-Compile/Makefile
  20. @@ -0,0 +1,325 @@
  21. +
  22. +#=============================================================================
  23. +#
  24. +# This Makefile template is part of the SoftFloat IEEE Floating-Point
  25. +# Arithmetic Package, Release 3e, by John R. Hauser.
  26. +#
  27. +# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
  28. +# University of California. All rights reserved.
  29. +#
  30. +# Redistribution and use in source and binary forms, with or without
  31. +# modification, are permitted provided that the following conditions are met:
  32. +#
  33. +# 1. Redistributions of source code must retain the above copyright notice,
  34. +# this list of conditions, and the following disclaimer.
  35. +#
  36. +# 2. Redistributions in binary form must reproduce the above copyright
  37. +# notice, this list of conditions, and the following disclaimer in the
  38. +# documentation and/or other materials provided with the distribution.
  39. +#
  40. +# 3. Neither the name of the University nor the names of its contributors
  41. +# may be used to endorse or promote products derived from this software
  42. +# without specific prior written permission.
  43. +#
  44. +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
  45. +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  46. +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
  47. +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
  48. +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  49. +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  50. +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  51. +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  52. +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  53. +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  54. +#
  55. +#=============================================================================
  56. +
  57. +SOURCE_DIR ?= ../../source
  58. +SPECIALIZE_TYPE ?= 8086
  59. +
  60. +SOFTFLOAT_OPTS ?= \
  61. + -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
  62. + -DSOFTFLOAT_FAST_DIV64TO32
  63. +
  64. +DELETE = rm -f
  65. +C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
  66. +COMPILE_C = \
  67. + ${CC} -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \
  68. + $(C_INCLUDES) -O2 -o $@
  69. +MAKELIB = ${AR} crs $@
  70. +
  71. +OBJ = .o
  72. +LIB = .a
  73. +
  74. +OTHER_HEADERS =
  75. +
  76. +.PHONY: all
  77. +all: softfloat$(LIB)
  78. +
  79. +OBJS_PRIMITIVES = \
  80. + s_compare96M$(OBJ) \
  81. + s_compare128M$(OBJ) \
  82. + s_shortShiftLeft64To96M$(OBJ) \
  83. + s_shortShiftLeftM$(OBJ) \
  84. + s_shiftLeftM$(OBJ) \
  85. + s_shortShiftRightM$(OBJ) \
  86. + s_shortShiftRightJam64$(OBJ) \
  87. + s_shortShiftRightJamM$(OBJ) \
  88. + s_shiftRightJam32$(OBJ) \
  89. + s_shiftRightJam64$(OBJ) \
  90. + s_shiftRightJamM$(OBJ) \
  91. + s_shiftRightM$(OBJ) \
  92. + s_countLeadingZeros8$(OBJ) \
  93. + s_countLeadingZeros16$(OBJ) \
  94. + s_countLeadingZeros32$(OBJ) \
  95. + s_countLeadingZeros64$(OBJ) \
  96. + s_addM$(OBJ) \
  97. + s_addCarryM$(OBJ) \
  98. + s_addComplCarryM$(OBJ) \
  99. + s_negXM$(OBJ) \
  100. + s_sub1XM$(OBJ) \
  101. + s_subM$(OBJ) \
  102. + s_mul64To128M$(OBJ) \
  103. + s_mul128MTo256M$(OBJ) \
  104. + s_approxRecip_1Ks$(OBJ) \
  105. + s_approxRecip32_1$(OBJ) \
  106. + s_approxRecipSqrt_1Ks$(OBJ) \
  107. + s_approxRecipSqrt32_1$(OBJ) \
  108. + s_remStepMBy32$(OBJ) \
  109. +
  110. +OBJS_SPECIALIZE = \
  111. + softfloat_raiseFlags$(OBJ) \
  112. + s_f16UIToCommonNaN$(OBJ) \
  113. + s_commonNaNToF16UI$(OBJ) \
  114. + s_propagateNaNF16UI$(OBJ) \
  115. + s_f32UIToCommonNaN$(OBJ) \
  116. + s_commonNaNToF32UI$(OBJ) \
  117. + s_propagateNaNF32UI$(OBJ) \
  118. + s_f64UIToCommonNaN$(OBJ) \
  119. + s_commonNaNToF64UI$(OBJ) \
  120. + s_propagateNaNF64UI$(OBJ) \
  121. + extF80M_isSignalingNaN$(OBJ) \
  122. + s_extF80MToCommonNaN$(OBJ) \
  123. + s_commonNaNToExtF80M$(OBJ) \
  124. + s_propagateNaNExtF80M$(OBJ) \
  125. + f128M_isSignalingNaN$(OBJ) \
  126. + s_f128MToCommonNaN$(OBJ) \
  127. + s_commonNaNToF128M$(OBJ) \
  128. + s_propagateNaNF128M$(OBJ) \
  129. +
  130. +OBJS_OTHERS = \
  131. + s_roundToUI32$(OBJ) \
  132. + s_roundMToUI64$(OBJ) \
  133. + s_roundToI32$(OBJ) \
  134. + s_roundMToI64$(OBJ) \
  135. + s_normSubnormalF16Sig$(OBJ) \
  136. + s_roundPackToF16$(OBJ) \
  137. + s_normRoundPackToF16$(OBJ) \
  138. + s_addMagsF16$(OBJ) \
  139. + s_subMagsF16$(OBJ) \
  140. + s_mulAddF16$(OBJ) \
  141. + s_normSubnormalF32Sig$(OBJ) \
  142. + s_roundPackToF32$(OBJ) \
  143. + s_normRoundPackToF32$(OBJ) \
  144. + s_addMagsF32$(OBJ) \
  145. + s_subMagsF32$(OBJ) \
  146. + s_mulAddF32$(OBJ) \
  147. + s_normSubnormalF64Sig$(OBJ) \
  148. + s_roundPackToF64$(OBJ) \
  149. + s_normRoundPackToF64$(OBJ) \
  150. + s_addMagsF64$(OBJ) \
  151. + s_subMagsF64$(OBJ) \
  152. + s_mulAddF64$(OBJ) \
  153. + s_tryPropagateNaNExtF80M$(OBJ) \
  154. + s_invalidExtF80M$(OBJ) \
  155. + s_normExtF80SigM$(OBJ) \
  156. + s_roundPackMToExtF80M$(OBJ) \
  157. + s_normRoundPackMToExtF80M$(OBJ) \
  158. + s_addExtF80M$(OBJ) \
  159. + s_compareNonnormExtF80M$(OBJ) \
  160. + s_isNaNF128M$(OBJ) \
  161. + s_tryPropagateNaNF128M$(OBJ) \
  162. + s_invalidF128M$(OBJ) \
  163. + s_shiftNormSigF128M$(OBJ) \
  164. + s_roundPackMToF128M$(OBJ) \
  165. + s_normRoundPackMToF128M$(OBJ) \
  166. + s_addF128M$(OBJ) \
  167. + s_mulAddF128M$(OBJ) \
  168. + softfloat_state$(OBJ) \
  169. + ui32_to_f16$(OBJ) \
  170. + ui32_to_f32$(OBJ) \
  171. + ui32_to_f64$(OBJ) \
  172. + ui32_to_extF80M$(OBJ) \
  173. + ui32_to_f128M$(OBJ) \
  174. + ui64_to_f16$(OBJ) \
  175. + ui64_to_f32$(OBJ) \
  176. + ui64_to_f64$(OBJ) \
  177. + ui64_to_extF80M$(OBJ) \
  178. + ui64_to_f128M$(OBJ) \
  179. + i32_to_f16$(OBJ) \
  180. + i32_to_f32$(OBJ) \
  181. + i32_to_f64$(OBJ) \
  182. + i32_to_extF80M$(OBJ) \
  183. + i32_to_f128M$(OBJ) \
  184. + i64_to_f16$(OBJ) \
  185. + i64_to_f32$(OBJ) \
  186. + i64_to_f64$(OBJ) \
  187. + i64_to_extF80M$(OBJ) \
  188. + i64_to_f128M$(OBJ) \
  189. + f16_to_ui32$(OBJ) \
  190. + f16_to_ui64$(OBJ) \
  191. + f16_to_i32$(OBJ) \
  192. + f16_to_i64$(OBJ) \
  193. + f16_to_ui32_r_minMag$(OBJ) \
  194. + f16_to_ui64_r_minMag$(OBJ) \
  195. + f16_to_i32_r_minMag$(OBJ) \
  196. + f16_to_i64_r_minMag$(OBJ) \
  197. + f16_to_f32$(OBJ) \
  198. + f16_to_f64$(OBJ) \
  199. + f16_to_extF80M$(OBJ) \
  200. + f16_to_f128M$(OBJ) \
  201. + f16_roundToInt$(OBJ) \
  202. + f16_add$(OBJ) \
  203. + f16_sub$(OBJ) \
  204. + f16_mul$(OBJ) \
  205. + f16_mulAdd$(OBJ) \
  206. + f16_div$(OBJ) \
  207. + f16_rem$(OBJ) \
  208. + f16_sqrt$(OBJ) \
  209. + f16_eq$(OBJ) \
  210. + f16_le$(OBJ) \
  211. + f16_lt$(OBJ) \
  212. + f16_eq_signaling$(OBJ) \
  213. + f16_le_quiet$(OBJ) \
  214. + f16_lt_quiet$(OBJ) \
  215. + f16_isSignalingNaN$(OBJ) \
  216. + f32_to_ui32$(OBJ) \
  217. + f32_to_ui64$(OBJ) \
  218. + f32_to_i32$(OBJ) \
  219. + f32_to_i64$(OBJ) \
  220. + f32_to_ui32_r_minMag$(OBJ) \
  221. + f32_to_ui64_r_minMag$(OBJ) \
  222. + f32_to_i32_r_minMag$(OBJ) \
  223. + f32_to_i64_r_minMag$(OBJ) \
  224. + f32_to_f16$(OBJ) \
  225. + f32_to_f64$(OBJ) \
  226. + f32_to_extF80M$(OBJ) \
  227. + f32_to_f128M$(OBJ) \
  228. + f32_roundToInt$(OBJ) \
  229. + f32_add$(OBJ) \
  230. + f32_sub$(OBJ) \
  231. + f32_mul$(OBJ) \
  232. + f32_mulAdd$(OBJ) \
  233. + f32_div$(OBJ) \
  234. + f32_rem$(OBJ) \
  235. + f32_sqrt$(OBJ) \
  236. + f32_eq$(OBJ) \
  237. + f32_le$(OBJ) \
  238. + f32_lt$(OBJ) \
  239. + f32_eq_signaling$(OBJ) \
  240. + f32_le_quiet$(OBJ) \
  241. + f32_lt_quiet$(OBJ) \
  242. + f32_isSignalingNaN$(OBJ) \
  243. + f64_to_ui32$(OBJ) \
  244. + f64_to_ui64$(OBJ) \
  245. + f64_to_i32$(OBJ) \
  246. + f64_to_i64$(OBJ) \
  247. + f64_to_ui32_r_minMag$(OBJ) \
  248. + f64_to_ui64_r_minMag$(OBJ) \
  249. + f64_to_i32_r_minMag$(OBJ) \
  250. + f64_to_i64_r_minMag$(OBJ) \
  251. + f64_to_f16$(OBJ) \
  252. + f64_to_f32$(OBJ) \
  253. + f64_to_extF80M$(OBJ) \
  254. + f64_to_f128M$(OBJ) \
  255. + f64_roundToInt$(OBJ) \
  256. + f64_add$(OBJ) \
  257. + f64_sub$(OBJ) \
  258. + f64_mul$(OBJ) \
  259. + f64_mulAdd$(OBJ) \
  260. + f64_div$(OBJ) \
  261. + f64_rem$(OBJ) \
  262. + f64_sqrt$(OBJ) \
  263. + f64_eq$(OBJ) \
  264. + f64_le$(OBJ) \
  265. + f64_lt$(OBJ) \
  266. + f64_eq_signaling$(OBJ) \
  267. + f64_le_quiet$(OBJ) \
  268. + f64_lt_quiet$(OBJ) \
  269. + f64_isSignalingNaN$(OBJ) \
  270. + extF80M_to_ui32$(OBJ) \
  271. + extF80M_to_ui64$(OBJ) \
  272. + extF80M_to_i32$(OBJ) \
  273. + extF80M_to_i64$(OBJ) \
  274. + extF80M_to_ui32_r_minMag$(OBJ) \
  275. + extF80M_to_ui64_r_minMag$(OBJ) \
  276. + extF80M_to_i32_r_minMag$(OBJ) \
  277. + extF80M_to_i64_r_minMag$(OBJ) \
  278. + extF80M_to_f16$(OBJ) \
  279. + extF80M_to_f32$(OBJ) \
  280. + extF80M_to_f64$(OBJ) \
  281. + extF80M_to_f128M$(OBJ) \
  282. + extF80M_roundToInt$(OBJ) \
  283. + extF80M_add$(OBJ) \
  284. + extF80M_sub$(OBJ) \
  285. + extF80M_mul$(OBJ) \
  286. + extF80M_div$(OBJ) \
  287. + extF80M_rem$(OBJ) \
  288. + extF80M_sqrt$(OBJ) \
  289. + extF80M_eq$(OBJ) \
  290. + extF80M_le$(OBJ) \
  291. + extF80M_lt$(OBJ) \
  292. + extF80M_eq_signaling$(OBJ) \
  293. + extF80M_le_quiet$(OBJ) \
  294. + extF80M_lt_quiet$(OBJ) \
  295. + f128M_to_ui32$(OBJ) \
  296. + f128M_to_ui64$(OBJ) \
  297. + f128M_to_i32$(OBJ) \
  298. + f128M_to_i64$(OBJ) \
  299. + f128M_to_ui32_r_minMag$(OBJ) \
  300. + f128M_to_ui64_r_minMag$(OBJ) \
  301. + f128M_to_i32_r_minMag$(OBJ) \
  302. + f128M_to_i64_r_minMag$(OBJ) \
  303. + f128M_to_f16$(OBJ) \
  304. + f128M_to_f32$(OBJ) \
  305. + f128M_to_f64$(OBJ) \
  306. + f128M_to_extF80M$(OBJ) \
  307. + f128M_roundToInt$(OBJ) \
  308. + f128M_add$(OBJ) \
  309. + f128M_sub$(OBJ) \
  310. + f128M_mul$(OBJ) \
  311. + f128M_mulAdd$(OBJ) \
  312. + f128M_div$(OBJ) \
  313. + f128M_rem$(OBJ) \
  314. + f128M_sqrt$(OBJ) \
  315. + f128M_eq$(OBJ) \
  316. + f128M_le$(OBJ) \
  317. + f128M_lt$(OBJ) \
  318. + f128M_eq_signaling$(OBJ) \
  319. + f128M_le_quiet$(OBJ) \
  320. + f128M_lt_quiet$(OBJ) \
  321. +
  322. +OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS)
  323. +
  324. +$(OBJS_ALL): \
  325. + $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \
  326. + $(SOURCE_DIR)/include/primitives.h
  327. +$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \
  328. + $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \
  329. + $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \
  330. + $(SOURCE_DIR)/include/softfloat.h
  331. +
  332. +$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
  333. + $(COMPILE_C) $(SOURCE_DIR)/$*.c
  334. +
  335. +$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
  336. + $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
  337. +
  338. +softfloat$(LIB): $(OBJS_ALL)
  339. + $(DELETE) $@
  340. + $(MAKELIB) $^
  341. +
  342. +.PHONY: clean
  343. +clean:
  344. + $(DELETE) $(OBJS_ALL) softfloat$(LIB)
  345. +
  346. diff --git a/SoftFloat-3e/build/Linux-Cross-Compile/platform.h b/SoftFloat-3e/build/Linux-Cross-Compile/platform.h
  347. new file mode 100644
  348. index 0000000..1728c15
  349. --- /dev/null
  350. +++ b/SoftFloat-3e/build/Linux-Cross-Compile/platform.h
  351. @@ -0,0 +1,52 @@
  352. +
  353. +/*============================================================================
  354. +
  355. +This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic
  356. +Package, Release 3e, by John R. Hauser.
  357. +
  358. +Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of
  359. +California. All rights reserved.
  360. +
  361. +Redistribution and use in source and binary forms, with or without
  362. +modification, are permitted provided that the following conditions are met:
  363. +
  364. + 1. Redistributions of source code must retain the above copyright notice,
  365. + this list of conditions, and the following disclaimer.
  366. +
  367. + 2. Redistributions in binary form must reproduce the above copyright notice,
  368. + this list of conditions, and the following disclaimer in the documentation
  369. + and/or other materials provided with the distribution.
  370. +
  371. + 3. Neither the name of the University nor the names of its contributors may
  372. + be used to endorse or promote products derived from this software without
  373. + specific prior written permission.
  374. +
  375. +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
  376. +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  377. +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
  378. +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
  379. +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  380. +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  381. +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  382. +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  383. +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  384. +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  385. +
  386. +=============================================================================*/
  387. +
  388. +/*----------------------------------------------------------------------------
  389. +*----------------------------------------------------------------------------*/
  390. +#define LITTLEENDIAN 1
  391. +
  392. +/*----------------------------------------------------------------------------
  393. +*----------------------------------------------------------------------------*/
  394. +#ifdef __GNUC_STDC_INLINE__
  395. +#define INLINE inline
  396. +#else
  397. +#define INLINE extern inline
  398. +#endif
  399. +
  400. +/*----------------------------------------------------------------------------
  401. +*----------------------------------------------------------------------------*/
  402. +#define SOFTFLOAT_BUILTIN_CLZ 1
  403. +#include "opts-GCC.h"
  404. --
  405. 2.7.4