PPCScheduleE500mc.td 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. //===-- PPCScheduleE500mc.td - e500mc Scheduling Defs ------*- tablegen -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file defines the itinerary class data for the Freescale e500mc 32-bit
  10. // Power processor.
  11. //
  12. // All information is derived from the "e500mc Core Reference Manual",
  13. // Freescale Document Number E500MCRM, Rev. 1, 03/2012.
  14. //
  15. //===----------------------------------------------------------------------===//
  16. // Relevant functional units in the Freescale e500mc core:
  17. //
  18. // * Decode & Dispatch
  19. // Can dispatch up to 2 instructions per clock cycle to either the GPR Issue
  20. // queues (GIQx), FP Issue Queue (FIQ), or Branch issue queue (BIQ).
  21. def E500mc_DIS0 : FuncUnit; // Dispatch stage - insn 1
  22. def E500mc_DIS1 : FuncUnit; // Dispatch stage - insn 2
  23. // * Execute
  24. // 6 pipelined execution units: SFX0, SFX1, BU, FPU, LSU, CFX.
  25. // Some instructions can only execute in SFX0 but not SFX1.
  26. // The CFX has a bypass path, allowing non-divide instructions to execute
  27. // while a divide instruction is executed.
  28. def E500mc_SFX0 : FuncUnit; // Simple unit 0
  29. def E500mc_SFX1 : FuncUnit; // Simple unit 1
  30. def E500mc_BU : FuncUnit; // Branch unit
  31. def E500mc_CFX_DivBypass
  32. : FuncUnit; // CFX divide bypass path
  33. def E500mc_CFX_0 : FuncUnit; // CFX pipeline
  34. def E500mc_LSU_0 : FuncUnit; // LSU pipeline
  35. def E500mc_FPU_0 : FuncUnit; // FPU pipeline
  36. def E500mc_GPR_Bypass : Bypass;
  37. def E500mc_FPR_Bypass : Bypass;
  38. def E500mc_CR_Bypass : Bypass;
  39. def PPCE500mcItineraries : ProcessorItineraries<
  40. [E500mc_DIS0, E500mc_DIS1, E500mc_SFX0, E500mc_SFX1, E500mc_BU, E500mc_CFX_DivBypass,
  41. E500mc_CFX_0, E500mc_LSU_0, E500mc_FPU_0],
  42. [E500mc_CR_Bypass, E500mc_GPR_Bypass, E500mc_FPR_Bypass], [
  43. InstrItinData<IIC_IntSimple, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  44. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  45. [4, 1, 1], // Latency = 1
  46. [E500mc_GPR_Bypass,
  47. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  48. InstrItinData<IIC_IntGeneral, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  49. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  50. [4, 1, 1], // Latency = 1
  51. [E500mc_GPR_Bypass,
  52. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  53. InstrItinData<IIC_IntISEL, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  54. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  55. [4, 1, 1, 1], // Latency = 1
  56. [E500mc_GPR_Bypass,
  57. E500mc_GPR_Bypass, E500mc_GPR_Bypass,
  58. E500mc_CR_Bypass]>,
  59. InstrItinData<IIC_IntCompare, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  60. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  61. [5, 1, 1], // Latency = 1 or 2
  62. [E500mc_CR_Bypass,
  63. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  64. InstrItinData<IIC_IntDivW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  65. InstrStage<1, [E500mc_CFX_0], 0>,
  66. InstrStage<14, [E500mc_CFX_DivBypass]>],
  67. [17, 1, 1], // Latency=4..35, Repeat= 4..35
  68. [E500mc_GPR_Bypass,
  69. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  70. InstrItinData<IIC_IntMFFS, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  71. InstrStage<8, [E500mc_FPU_0]>],
  72. [11], // Latency = 8
  73. [E500mc_FPR_Bypass]>,
  74. InstrItinData<IIC_IntMTFSB0, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  75. InstrStage<8, [E500mc_FPU_0]>],
  76. [11, 1, 1], // Latency = 8
  77. [NoBypass, NoBypass, NoBypass]>,
  78. InstrItinData<IIC_IntMulHW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  79. InstrStage<1, [E500mc_CFX_0]>],
  80. [7, 1, 1], // Latency = 4, Repeat rate = 1
  81. [E500mc_GPR_Bypass,
  82. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  83. InstrItinData<IIC_IntMulHWU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  84. InstrStage<1, [E500mc_CFX_0]>],
  85. [7, 1, 1], // Latency = 4, Repeat rate = 1
  86. [E500mc_GPR_Bypass,
  87. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  88. InstrItinData<IIC_IntMulLI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  89. InstrStage<1, [E500mc_CFX_0]>],
  90. [7, 1, 1], // Latency = 4, Repeat rate = 1
  91. [E500mc_GPR_Bypass,
  92. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  93. InstrItinData<IIC_IntRotate, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  94. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  95. [4, 1, 1], // Latency = 1
  96. [E500mc_GPR_Bypass,
  97. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  98. InstrItinData<IIC_IntShift, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  99. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  100. [4, 1, 1], // Latency = 1
  101. [E500mc_GPR_Bypass,
  102. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  103. InstrItinData<IIC_IntTrapW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  104. InstrStage<2, [E500mc_SFX0]>],
  105. [5, 1], // Latency = 2, Repeat rate = 2
  106. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  107. InstrItinData<IIC_BrB, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  108. InstrStage<1, [E500mc_BU]>],
  109. [4, 1], // Latency = 1
  110. [NoBypass, E500mc_GPR_Bypass]>,
  111. InstrItinData<IIC_BrCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  112. InstrStage<1, [E500mc_BU]>],
  113. [4, 1, 1], // Latency = 1
  114. [E500mc_CR_Bypass,
  115. E500mc_CR_Bypass, E500mc_CR_Bypass]>,
  116. InstrItinData<IIC_BrMCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  117. InstrStage<1, [E500mc_BU]>],
  118. [4, 1], // Latency = 1
  119. [E500mc_CR_Bypass, E500mc_CR_Bypass]>,
  120. InstrItinData<IIC_BrMCRX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  121. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  122. [4, 1, 1], // Latency = 1
  123. [E500mc_CR_Bypass, E500mc_GPR_Bypass]>,
  124. InstrItinData<IIC_LdStDCBA, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  125. InstrStage<1, [E500mc_LSU_0]>],
  126. [6, 1], // Latency = 3, Repeat rate = 1
  127. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  128. InstrItinData<IIC_LdStDCBF, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  129. InstrStage<1, [E500mc_LSU_0]>],
  130. [6, 1], // Latency = 3
  131. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  132. InstrItinData<IIC_LdStDCBI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  133. InstrStage<1, [E500mc_LSU_0]>],
  134. [6, 1], // Latency = 3
  135. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  136. InstrItinData<IIC_LdStLoad, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  137. InstrStage<1, [E500mc_LSU_0]>],
  138. [6, 1], // Latency = 3
  139. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  140. InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  141. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  142. InstrStage<1, [E500mc_LSU_0]>],
  143. [6, 1], // Latency = 3
  144. [E500mc_GPR_Bypass, E500mc_GPR_Bypass],
  145. 2>, // 2 micro-ops
  146. InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  147. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  148. InstrStage<1, [E500mc_LSU_0]>],
  149. [6, 1], // Latency = 3
  150. [E500mc_GPR_Bypass, E500mc_GPR_Bypass],
  151. 2>, // 2 micro-ops
  152. InstrItinData<IIC_LdStStore, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  153. InstrStage<1, [E500mc_LSU_0]>],
  154. [6, 1], // Latency = 3
  155. [NoBypass, E500mc_GPR_Bypass]>,
  156. InstrItinData<IIC_LdStSTU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  157. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  158. InstrStage<1, [E500mc_LSU_0]>],
  159. [6, 1], // Latency = 3
  160. [NoBypass, E500mc_GPR_Bypass],
  161. 2>, // 2 micro-ops
  162. InstrItinData<IIC_LdStSTUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  163. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  164. InstrStage<1, [E500mc_LSU_0]>],
  165. [6, 1], // Latency = 3
  166. [NoBypass, E500mc_GPR_Bypass],
  167. 2>, // 2 micro-ops
  168. InstrItinData<IIC_LdStICBI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  169. InstrStage<1, [E500mc_LSU_0]>],
  170. [6, 1], // Latency = 3
  171. [NoBypass, E500mc_GPR_Bypass]>,
  172. InstrItinData<IIC_LdStSTFD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  173. InstrStage<1, [E500mc_LSU_0]>],
  174. [6, 1, 1], // Latency = 3
  175. [E500mc_GPR_Bypass,
  176. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  177. InstrItinData<IIC_LdStSTFDU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  178. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  179. InstrStage<1, [E500mc_LSU_0]>],
  180. [6, 1, 1], // Latency = 3
  181. [E500mc_GPR_Bypass,
  182. E500mc_GPR_Bypass, E500mc_GPR_Bypass],
  183. 2>, // 2 micro-ops
  184. InstrItinData<IIC_LdStLFD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  185. InstrStage<1, [E500mc_LSU_0]>],
  186. [7, 1, 1], // Latency = 4
  187. [E500mc_FPR_Bypass,
  188. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  189. InstrItinData<IIC_LdStLFDU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  190. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  191. InstrStage<1, [E500mc_LSU_0]>],
  192. [7, 1, 1], // Latency = 4
  193. [E500mc_FPR_Bypass,
  194. E500mc_GPR_Bypass, E500mc_GPR_Bypass],
  195. 2>, // 2 micro-ops
  196. InstrItinData<IIC_LdStLFDUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  197. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  198. InstrStage<1, [E500mc_LSU_0]>],
  199. [7, 1, 1], // Latency = 4
  200. [E500mc_FPR_Bypass,
  201. E500mc_GPR_Bypass, E500mc_GPR_Bypass],
  202. 2>, // 2 micro-ops
  203. InstrItinData<IIC_LdStLHA, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  204. InstrStage<1, [E500mc_LSU_0]>],
  205. [6, 1], // Latency = 3
  206. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  207. InstrItinData<IIC_LdStLHAU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  208. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  209. InstrStage<1, [E500mc_LSU_0]>],
  210. [6, 1], // Latency = 3
  211. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  212. InstrItinData<IIC_LdStLHAUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  213. InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>,
  214. InstrStage<1, [E500mc_LSU_0]>],
  215. [6, 1], // Latency = 3
  216. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  217. InstrItinData<IIC_LdStLMW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  218. InstrStage<1, [E500mc_LSU_0]>],
  219. [7, 1], // Latency = r+3
  220. [NoBypass, E500mc_GPR_Bypass]>,
  221. InstrItinData<IIC_LdStLWARX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  222. InstrStage<3, [E500mc_LSU_0]>],
  223. [6, 1, 1], // Latency = 3, Repeat rate = 3
  224. [E500mc_GPR_Bypass,
  225. E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  226. InstrItinData<IIC_LdStSTWCX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  227. InstrStage<1, [E500mc_LSU_0]>],
  228. [6, 1], // Latency = 3
  229. [NoBypass, E500mc_GPR_Bypass]>,
  230. InstrItinData<IIC_LdStSync, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  231. InstrStage<1, [E500mc_LSU_0]>]>,
  232. InstrItinData<IIC_SprMFSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  233. InstrStage<4, [E500mc_SFX0]>],
  234. [7, 1],
  235. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  236. InstrItinData<IIC_SprMTMSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  237. InstrStage<2, [E500mc_SFX0, E500mc_SFX1]>],
  238. [5, 1], // Latency = 2, Repeat rate = 4
  239. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  240. InstrItinData<IIC_SprMTSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  241. InstrStage<1, [E500mc_SFX0]>],
  242. [5, 1],
  243. [NoBypass, E500mc_GPR_Bypass]>,
  244. InstrItinData<IIC_SprTLBSYNC, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  245. InstrStage<1, [E500mc_LSU_0], 0>]>,
  246. InstrItinData<IIC_SprMFCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  247. InstrStage<5, [E500mc_SFX0]>],
  248. [8, 1],
  249. [E500mc_GPR_Bypass, E500mc_CR_Bypass]>,
  250. InstrItinData<IIC_SprMFCRF, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  251. InstrStage<5, [E500mc_SFX0]>],
  252. [8, 1],
  253. [E500mc_GPR_Bypass, E500mc_CR_Bypass]>,
  254. InstrItinData<IIC_SprMFPMR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  255. InstrStage<4, [E500mc_SFX0]>],
  256. [7, 1], // Latency = 4, Repeat rate = 4
  257. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  258. InstrItinData<IIC_SprMFMSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  259. InstrStage<4, [E500mc_SFX0]>],
  260. [7, 1], // Latency = 4, Repeat rate = 4
  261. [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>,
  262. InstrItinData<IIC_SprMFSPR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  263. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  264. [4, 1], // Latency = 1, Repeat rate = 1
  265. [E500mc_GPR_Bypass, E500mc_CR_Bypass]>,
  266. InstrItinData<IIC_SprMTPMR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  267. InstrStage<1, [E500mc_SFX0]>],
  268. [4, 1], // Latency = 1, Repeat rate = 1
  269. [E500mc_CR_Bypass, E500mc_GPR_Bypass]>,
  270. InstrItinData<IIC_SprMFTB, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  271. InstrStage<4, [E500mc_SFX0]>],
  272. [7, 1], // Latency = 4, Repeat rate = 4
  273. [NoBypass, E500mc_GPR_Bypass]>,
  274. InstrItinData<IIC_SprMTSPR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  275. InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>],
  276. [4, 1], // Latency = 1, Repeat rate = 1
  277. [E500mc_CR_Bypass, E500mc_GPR_Bypass]>,
  278. InstrItinData<IIC_SprMTSRIN, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  279. InstrStage<1, [E500mc_SFX0]>],
  280. [4, 1],
  281. [NoBypass, E500mc_GPR_Bypass]>,
  282. InstrItinData<IIC_FPGeneral, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  283. InstrStage<2, [E500mc_FPU_0]>],
  284. [11, 1, 1], // Latency = 8, Repeat rate = 2
  285. [E500mc_FPR_Bypass,
  286. E500mc_FPR_Bypass, E500mc_FPR_Bypass]>,
  287. InstrItinData<IIC_FPAddSub, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  288. InstrStage<4, [E500mc_FPU_0]>],
  289. [13, 1, 1], // Latency = 10, Repeat rate = 4
  290. [E500mc_FPR_Bypass,
  291. E500mc_FPR_Bypass, E500mc_FPR_Bypass]>,
  292. InstrItinData<IIC_FPCompare, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  293. InstrStage<2, [E500mc_FPU_0]>],
  294. [11, 1, 1], // Latency = 8, Repeat rate = 2
  295. [E500mc_CR_Bypass,
  296. E500mc_FPR_Bypass, E500mc_FPR_Bypass]>,
  297. InstrItinData<IIC_FPDivD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  298. InstrStage<68, [E500mc_FPU_0]>],
  299. [71, 1, 1], // Latency = 68, Repeat rate = 68
  300. [E500mc_FPR_Bypass,
  301. E500mc_FPR_Bypass, E500mc_FPR_Bypass]>,
  302. InstrItinData<IIC_FPDivS, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  303. InstrStage<38, [E500mc_FPU_0]>],
  304. [41, 1, 1], // Latency = 38, Repeat rate = 38
  305. [E500mc_FPR_Bypass,
  306. E500mc_FPR_Bypass, E500mc_FPR_Bypass]>,
  307. InstrItinData<IIC_FPFused, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  308. InstrStage<4, [E500mc_FPU_0]>],
  309. [13, 1, 1, 1], // Latency = 10, Repeat rate = 4
  310. [E500mc_FPR_Bypass,
  311. E500mc_FPR_Bypass, E500mc_FPR_Bypass,
  312. E500mc_FPR_Bypass]>,
  313. InstrItinData<IIC_FPRes, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>,
  314. InstrStage<38, [E500mc_FPU_0]>],
  315. [41, 1], // Latency = 38, Repeat rate = 38
  316. [E500mc_FPR_Bypass, E500mc_FPR_Bypass]>
  317. ]>;
  318. // ===---------------------------------------------------------------------===//
  319. // e500mc machine model for scheduling and other instruction cost heuristics.
  320. def PPCE500mcModel : SchedMachineModel {
  321. let IssueWidth = 2; // 2 micro-ops are dispatched per cycle.
  322. let LoadLatency = 5; // Optimistic load latency assuming bypass.
  323. // This is overriden by OperandCycles if the
  324. // Itineraries are queried instead.
  325. let CompleteModel = 0;
  326. let Itineraries = PPCE500mcItineraries;
  327. }