perf_asm.S 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /* low-level asm for "intrigue" (PA8500-8700 CPU perf counters)
  3. *
  4. * Copyright (C) 2001 Randolph Chung <tausq at parisc-linux.org>
  5. * Copyright (C) 2001 Hewlett-Packard (Grant Grundler)
  6. */
  7. #include <asm/assembly.h>
  8. #include <linux/init.h>
  9. #include <linux/linkage.h>
  10. #ifdef CONFIG_64BIT
  11. .level 2.0w
  12. #endif /* CONFIG_64BIT */
  13. #define MTDIAG_1(gr) .word 0x14201840 + gr*0x10000
  14. #define MTDIAG_2(gr) .word 0x14401840 + gr*0x10000
  15. #define MFDIAG_1(gr) .word 0x142008A0 + gr
  16. #define MFDIAG_2(gr) .word 0x144008A0 + gr
  17. #define STDIAG(dr) .word 0x14000AA0 + dr*0x200000
  18. #define SFDIAG(dr) .word 0x14000BA0 + dr*0x200000
  19. #define DR2_SLOW_RET 53
  20. ;
  21. ; Enable the performance counters
  22. ;
  23. ; The coprocessor only needs to be enabled when
  24. ; starting/stopping the coprocessor with the pmenb/pmdis.
  25. ;
  26. .text
  27. ENTRY(perf_intrigue_enable_perf_counters)
  28. .proc
  29. .callinfo frame=0,NO_CALLS
  30. .entry
  31. ldi 0x20,%r25 ; load up perfmon bit
  32. mfctl ccr,%r26 ; get coprocessor register
  33. or %r25,%r26,%r26 ; set bit
  34. mtctl %r26,ccr ; turn on performance coprocessor
  35. pmenb ; enable performance monitor
  36. ssm 0,0 ; dummy op to ensure completion
  37. sync ; follow ERS
  38. andcm %r26,%r25,%r26 ; clear bit now
  39. mtctl %r26,ccr ; turn off performance coprocessor
  40. nop ; NOPs as specified in ERS
  41. nop
  42. nop
  43. nop
  44. nop
  45. nop
  46. nop
  47. bve (%r2)
  48. nop
  49. .exit
  50. .procend
  51. ENDPROC(perf_intrigue_enable_perf_counters)
  52. ENTRY(perf_intrigue_disable_perf_counters)
  53. .proc
  54. .callinfo frame=0,NO_CALLS
  55. .entry
  56. ldi 0x20,%r25 ; load up perfmon bit
  57. mfctl ccr,%r26 ; get coprocessor register
  58. or %r25,%r26,%r26 ; set bit
  59. mtctl %r26,ccr ; turn on performance coprocessor
  60. pmdis ; disable performance monitor
  61. ssm 0,0 ; dummy op to ensure completion
  62. andcm %r26,%r25,%r26 ; clear bit now
  63. bve (%r2)
  64. mtctl %r26,ccr ; turn off performance coprocessor
  65. .exit
  66. .procend
  67. ENDPROC(perf_intrigue_disable_perf_counters)
  68. ;***********************************************************************
  69. ;*
  70. ;* Name: perf_rdr_shift_in_W
  71. ;*
  72. ;* Description:
  73. ;* This routine shifts data in from the RDR in arg0 and returns
  74. ;* the result in ret0. If the RDR is <= 64 bits in length, it
  75. ;* is shifted shifted backup immediately. This is to compensate
  76. ;* for RDR10 which has bits that preclude PDC stack operations
  77. ;* when they are in the wrong state.
  78. ;*
  79. ;* Arguments:
  80. ;* arg0 : rdr to be read
  81. ;* arg1 : bit length of rdr
  82. ;*
  83. ;* Returns:
  84. ;* ret0 = next 64 bits of rdr data from staging register
  85. ;*
  86. ;* Register usage:
  87. ;* arg0 : rdr to be read
  88. ;* arg1 : bit length of rdr
  89. ;* %r24 - original DR2 value
  90. ;* %r1 - scratch
  91. ;* %r29 - scratch
  92. ;*
  93. ;* Returns:
  94. ;* ret0 = RDR data (right justified)
  95. ;*
  96. ;***********************************************************************
  97. ENTRY(perf_rdr_shift_in_W)
  98. .proc
  99. .callinfo frame=0,NO_CALLS
  100. .entry
  101. ;
  102. ; read(shift in) the RDR.
  103. ;
  104. ; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
  105. ; shifting is done, from or to, remote diagnose registers.
  106. ;
  107. depdi,z 1,DR2_SLOW_RET,1,%r29
  108. MFDIAG_2 (24)
  109. or %r24,%r29,%r29
  110. MTDIAG_2 (29) ; set DR2_SLOW_RET
  111. nop
  112. nop
  113. nop
  114. nop
  115. ;
  116. ; Cacheline start (32-byte cacheline)
  117. ;
  118. nop
  119. nop
  120. nop
  121. extrd,u arg1,63,6,%r1 ; setup shift amount by bits to move
  122. mtsar %r1
  123. shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
  124. blr %r1,%r0 ; branch to 8-instruction sequence
  125. nop
  126. ;
  127. ; Cacheline start (32-byte cacheline)
  128. ;
  129. ;
  130. ; RDR 0 sequence
  131. ;
  132. SFDIAG (0)
  133. ssm 0,0
  134. MFDIAG_1 (28)
  135. shrpd ret0,%r0,%sar,%r1
  136. MTDIAG_1 (1) ; mtdiag %dr1, %r1
  137. STDIAG (0)
  138. ssm 0,0
  139. b,n perf_rdr_shift_in_W_leave
  140. ;
  141. ; RDR 1 sequence
  142. ;
  143. sync
  144. ssm 0,0
  145. SFDIAG (1)
  146. ssm 0,0
  147. MFDIAG_1 (28)
  148. ssm 0,0
  149. b,n perf_rdr_shift_in_W_leave
  150. nop
  151. ;
  152. ; RDR 2 read sequence
  153. ;
  154. SFDIAG (2)
  155. ssm 0,0
  156. MFDIAG_1 (28)
  157. shrpd ret0,%r0,%sar,%r1
  158. MTDIAG_1 (1)
  159. STDIAG (2)
  160. ssm 0,0
  161. b,n perf_rdr_shift_in_W_leave
  162. ;
  163. ; RDR 3 read sequence
  164. ;
  165. b,n perf_rdr_shift_in_W_leave
  166. nop
  167. nop
  168. nop
  169. nop
  170. nop
  171. nop
  172. nop
  173. ;
  174. ; RDR 4 read sequence
  175. ;
  176. sync
  177. ssm 0,0
  178. SFDIAG (4)
  179. ssm 0,0
  180. MFDIAG_1 (28)
  181. b,n perf_rdr_shift_in_W_leave
  182. ssm 0,0
  183. nop
  184. ;
  185. ; RDR 5 read sequence
  186. ;
  187. sync
  188. ssm 0,0
  189. SFDIAG (5)
  190. ssm 0,0
  191. MFDIAG_1 (28)
  192. b,n perf_rdr_shift_in_W_leave
  193. ssm 0,0
  194. nop
  195. ;
  196. ; RDR 6 read sequence
  197. ;
  198. sync
  199. ssm 0,0
  200. SFDIAG (6)
  201. ssm 0,0
  202. MFDIAG_1 (28)
  203. b,n perf_rdr_shift_in_W_leave
  204. ssm 0,0
  205. nop
  206. ;
  207. ; RDR 7 read sequence
  208. ;
  209. b,n perf_rdr_shift_in_W_leave
  210. nop
  211. nop
  212. nop
  213. nop
  214. nop
  215. nop
  216. nop
  217. ;
  218. ; RDR 8 read sequence
  219. ;
  220. b,n perf_rdr_shift_in_W_leave
  221. nop
  222. nop
  223. nop
  224. nop
  225. nop
  226. nop
  227. nop
  228. ;
  229. ; RDR 9 read sequence
  230. ;
  231. b,n perf_rdr_shift_in_W_leave
  232. nop
  233. nop
  234. nop
  235. nop
  236. nop
  237. nop
  238. nop
  239. ;
  240. ; RDR 10 read sequence
  241. ;
  242. SFDIAG (10)
  243. ssm 0,0
  244. MFDIAG_1 (28)
  245. shrpd ret0,%r0,%sar,%r1
  246. MTDIAG_1 (1)
  247. STDIAG (10)
  248. ssm 0,0
  249. b,n perf_rdr_shift_in_W_leave
  250. ;
  251. ; RDR 11 read sequence
  252. ;
  253. SFDIAG (11)
  254. ssm 0,0
  255. MFDIAG_1 (28)
  256. shrpd ret0,%r0,%sar,%r1
  257. MTDIAG_1 (1)
  258. STDIAG (11)
  259. ssm 0,0
  260. b,n perf_rdr_shift_in_W_leave
  261. ;
  262. ; RDR 12 read sequence
  263. ;
  264. b,n perf_rdr_shift_in_W_leave
  265. nop
  266. nop
  267. nop
  268. nop
  269. nop
  270. nop
  271. nop
  272. ;
  273. ; RDR 13 read sequence
  274. ;
  275. sync
  276. ssm 0,0
  277. SFDIAG (13)
  278. ssm 0,0
  279. MFDIAG_1 (28)
  280. b,n perf_rdr_shift_in_W_leave
  281. ssm 0,0
  282. nop
  283. ;
  284. ; RDR 14 read sequence
  285. ;
  286. SFDIAG (14)
  287. ssm 0,0
  288. MFDIAG_1 (28)
  289. shrpd ret0,%r0,%sar,%r1
  290. MTDIAG_1 (1)
  291. STDIAG (14)
  292. ssm 0,0
  293. b,n perf_rdr_shift_in_W_leave
  294. ;
  295. ; RDR 15 read sequence
  296. ;
  297. sync
  298. ssm 0,0
  299. SFDIAG (15)
  300. ssm 0,0
  301. MFDIAG_1 (28)
  302. ssm 0,0
  303. b,n perf_rdr_shift_in_W_leave
  304. nop
  305. ;
  306. ; RDR 16 read sequence
  307. ;
  308. sync
  309. ssm 0,0
  310. SFDIAG (16)
  311. ssm 0,0
  312. MFDIAG_1 (28)
  313. b,n perf_rdr_shift_in_W_leave
  314. ssm 0,0
  315. nop
  316. ;
  317. ; RDR 17 read sequence
  318. ;
  319. SFDIAG (17)
  320. ssm 0,0
  321. MFDIAG_1 (28)
  322. shrpd ret0,%r0,%sar,%r1
  323. MTDIAG_1 (1)
  324. STDIAG (17)
  325. ssm 0,0
  326. b,n perf_rdr_shift_in_W_leave
  327. ;
  328. ; RDR 18 read sequence
  329. ;
  330. SFDIAG (18)
  331. ssm 0,0
  332. MFDIAG_1 (28)
  333. shrpd ret0,%r0,%sar,%r1
  334. MTDIAG_1 (1)
  335. STDIAG (18)
  336. ssm 0,0
  337. b,n perf_rdr_shift_in_W_leave
  338. ;
  339. ; RDR 19 read sequence
  340. ;
  341. b,n perf_rdr_shift_in_W_leave
  342. nop
  343. nop
  344. nop
  345. nop
  346. nop
  347. nop
  348. nop
  349. ;
  350. ; RDR 20 read sequence
  351. ;
  352. sync
  353. ssm 0,0
  354. SFDIAG (20)
  355. ssm 0,0
  356. MFDIAG_1 (28)
  357. b,n perf_rdr_shift_in_W_leave
  358. ssm 0,0
  359. nop
  360. ;
  361. ; RDR 21 read sequence
  362. ;
  363. sync
  364. ssm 0,0
  365. SFDIAG (21)
  366. ssm 0,0
  367. MFDIAG_1 (28)
  368. b,n perf_rdr_shift_in_W_leave
  369. ssm 0,0
  370. nop
  371. ;
  372. ; RDR 22 read sequence
  373. ;
  374. sync
  375. ssm 0,0
  376. SFDIAG (22)
  377. ssm 0,0
  378. MFDIAG_1 (28)
  379. b,n perf_rdr_shift_in_W_leave
  380. ssm 0,0
  381. nop
  382. ;
  383. ; RDR 23 read sequence
  384. ;
  385. sync
  386. ssm 0,0
  387. SFDIAG (23)
  388. ssm 0,0
  389. MFDIAG_1 (28)
  390. b,n perf_rdr_shift_in_W_leave
  391. ssm 0,0
  392. nop
  393. ;
  394. ; RDR 24 read sequence
  395. ;
  396. sync
  397. ssm 0,0
  398. SFDIAG (24)
  399. ssm 0,0
  400. MFDIAG_1 (28)
  401. b,n perf_rdr_shift_in_W_leave
  402. ssm 0,0
  403. nop
  404. ;
  405. ; RDR 25 read sequence
  406. ;
  407. sync
  408. ssm 0,0
  409. SFDIAG (25)
  410. ssm 0,0
  411. MFDIAG_1 (28)
  412. b,n perf_rdr_shift_in_W_leave
  413. ssm 0,0
  414. nop
  415. ;
  416. ; RDR 26 read sequence
  417. ;
  418. SFDIAG (26)
  419. ssm 0,0
  420. MFDIAG_1 (28)
  421. shrpd ret0,%r0,%sar,%r1
  422. MTDIAG_1 (1)
  423. STDIAG (26)
  424. ssm 0,0
  425. b,n perf_rdr_shift_in_W_leave
  426. ;
  427. ; RDR 27 read sequence
  428. ;
  429. SFDIAG (27)
  430. ssm 0,0
  431. MFDIAG_1 (28)
  432. shrpd ret0,%r0,%sar,%r1
  433. MTDIAG_1 (1)
  434. STDIAG (27)
  435. ssm 0,0
  436. b,n perf_rdr_shift_in_W_leave
  437. ;
  438. ; RDR 28 read sequence
  439. ;
  440. sync
  441. ssm 0,0
  442. SFDIAG (28)
  443. ssm 0,0
  444. MFDIAG_1 (28)
  445. b,n perf_rdr_shift_in_W_leave
  446. ssm 0,0
  447. nop
  448. ;
  449. ; RDR 29 read sequence
  450. ;
  451. sync
  452. ssm 0,0
  453. SFDIAG (29)
  454. ssm 0,0
  455. MFDIAG_1 (28)
  456. b,n perf_rdr_shift_in_W_leave
  457. ssm 0,0
  458. nop
  459. ;
  460. ; RDR 30 read sequence
  461. ;
  462. SFDIAG (30)
  463. ssm 0,0
  464. MFDIAG_1 (28)
  465. shrpd ret0,%r0,%sar,%r1
  466. MTDIAG_1 (1)
  467. STDIAG (30)
  468. ssm 0,0
  469. b,n perf_rdr_shift_in_W_leave
  470. ;
  471. ; RDR 31 read sequence
  472. ;
  473. sync
  474. ssm 0,0
  475. SFDIAG (31)
  476. ssm 0,0
  477. MFDIAG_1 (28)
  478. nop
  479. ssm 0,0
  480. nop
  481. ;
  482. ; Fallthrough
  483. ;
  484. perf_rdr_shift_in_W_leave:
  485. bve (%r2)
  486. .exit
  487. MTDIAG_2 (24) ; restore DR2
  488. .procend
  489. ENDPROC(perf_rdr_shift_in_W)
  490. ;***********************************************************************
  491. ;*
  492. ;* Name: perf_rdr_shift_out_W
  493. ;*
  494. ;* Description:
  495. ;* This routine moves data to the RDR's. The double-word that
  496. ;* arg1 points to is loaded and moved into the staging register.
  497. ;* Then the STDIAG instruction for the RDR # in arg0 is called
  498. ;* to move the data to the RDR.
  499. ;*
  500. ;* Arguments:
  501. ;* arg0 = rdr number
  502. ;* arg1 = 64-bit value to write
  503. ;* %r24 - DR2 | DR2_SLOW_RET
  504. ;* %r23 - original DR2 value
  505. ;*
  506. ;* Returns:
  507. ;* None
  508. ;*
  509. ;* Register usage:
  510. ;*
  511. ;***********************************************************************
  512. ENTRY(perf_rdr_shift_out_W)
  513. .proc
  514. .callinfo frame=0,NO_CALLS
  515. .entry
  516. ;
  517. ; NOTE: The PCX-W ERS states that DR2_SLOW_RET must be set before any
  518. ; shifting is done, from or to, the remote diagnose registers.
  519. ;
  520. depdi,z 1,DR2_SLOW_RET,1,%r24
  521. MFDIAG_2 (23)
  522. or %r24,%r23,%r24
  523. MTDIAG_2 (24) ; set DR2_SLOW_RET
  524. MTDIAG_1 (25) ; data to the staging register
  525. shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
  526. blr %r1,%r0 ; branch to 8-instruction sequence
  527. nop
  528. ;
  529. ; RDR 0 write sequence
  530. ;
  531. sync ; RDR 0 write sequence
  532. ssm 0,0
  533. STDIAG (0)
  534. ssm 0,0
  535. b,n perf_rdr_shift_out_W_leave
  536. nop
  537. ssm 0,0
  538. nop
  539. ;
  540. ; RDR 1 write sequence
  541. ;
  542. sync
  543. ssm 0,0
  544. STDIAG (1)
  545. ssm 0,0
  546. b,n perf_rdr_shift_out_W_leave
  547. nop
  548. ssm 0,0
  549. nop
  550. ;
  551. ; RDR 2 write sequence
  552. ;
  553. sync
  554. ssm 0,0
  555. STDIAG (2)
  556. ssm 0,0
  557. b,n perf_rdr_shift_out_W_leave
  558. nop
  559. ssm 0,0
  560. nop
  561. ;
  562. ; RDR 3 write sequence
  563. ;
  564. sync
  565. ssm 0,0
  566. STDIAG (3)
  567. ssm 0,0
  568. b,n perf_rdr_shift_out_W_leave
  569. nop
  570. ssm 0,0
  571. nop
  572. ;
  573. ; RDR 4 write sequence
  574. ;
  575. sync
  576. ssm 0,0
  577. STDIAG (4)
  578. ssm 0,0
  579. b,n perf_rdr_shift_out_W_leave
  580. nop
  581. ssm 0,0
  582. nop
  583. ;
  584. ; RDR 5 write sequence
  585. ;
  586. sync
  587. ssm 0,0
  588. STDIAG (5)
  589. ssm 0,0
  590. b,n perf_rdr_shift_out_W_leave
  591. nop
  592. ssm 0,0
  593. nop
  594. ;
  595. ; RDR 6 write sequence
  596. ;
  597. sync
  598. ssm 0,0
  599. STDIAG (6)
  600. ssm 0,0
  601. b,n perf_rdr_shift_out_W_leave
  602. nop
  603. ssm 0,0
  604. nop
  605. ;
  606. ; RDR 7 write sequence
  607. ;
  608. sync
  609. ssm 0,0
  610. STDIAG (7)
  611. ssm 0,0
  612. b,n perf_rdr_shift_out_W_leave
  613. nop
  614. ssm 0,0
  615. nop
  616. ;
  617. ; RDR 8 write sequence
  618. ;
  619. sync
  620. ssm 0,0
  621. STDIAG (8)
  622. ssm 0,0
  623. b,n perf_rdr_shift_out_W_leave
  624. nop
  625. ssm 0,0
  626. nop
  627. ;
  628. ; RDR 9 write sequence
  629. ;
  630. sync
  631. ssm 0,0
  632. STDIAG (9)
  633. ssm 0,0
  634. b,n perf_rdr_shift_out_W_leave
  635. nop
  636. ssm 0,0
  637. nop
  638. ;
  639. ; RDR 10 write sequence
  640. ;
  641. sync
  642. ssm 0,0
  643. STDIAG (10)
  644. STDIAG (26)
  645. ssm 0,0
  646. b,n perf_rdr_shift_out_W_leave
  647. ssm 0,0
  648. nop
  649. ;
  650. ; RDR 11 write sequence
  651. ;
  652. sync
  653. ssm 0,0
  654. STDIAG (11)
  655. STDIAG (27)
  656. ssm 0,0
  657. b,n perf_rdr_shift_out_W_leave
  658. ssm 0,0
  659. nop
  660. ;
  661. ; RDR 12 write sequence
  662. ;
  663. sync
  664. ssm 0,0
  665. STDIAG (12)
  666. ssm 0,0
  667. b,n perf_rdr_shift_out_W_leave
  668. nop
  669. ssm 0,0
  670. nop
  671. ;
  672. ; RDR 13 write sequence
  673. ;
  674. sync
  675. ssm 0,0
  676. STDIAG (13)
  677. ssm 0,0
  678. b,n perf_rdr_shift_out_W_leave
  679. nop
  680. ssm 0,0
  681. nop
  682. ;
  683. ; RDR 14 write sequence
  684. ;
  685. sync
  686. ssm 0,0
  687. STDIAG (14)
  688. ssm 0,0
  689. b,n perf_rdr_shift_out_W_leave
  690. nop
  691. ssm 0,0
  692. nop
  693. ;
  694. ; RDR 15 write sequence
  695. ;
  696. sync
  697. ssm 0,0
  698. STDIAG (15)
  699. ssm 0,0
  700. b,n perf_rdr_shift_out_W_leave
  701. nop
  702. ssm 0,0
  703. nop
  704. ;
  705. ; RDR 16 write sequence
  706. ;
  707. sync
  708. ssm 0,0
  709. STDIAG (16)
  710. ssm 0,0
  711. b,n perf_rdr_shift_out_W_leave
  712. nop
  713. ssm 0,0
  714. nop
  715. ;
  716. ; RDR 17 write sequence
  717. ;
  718. sync
  719. ssm 0,0
  720. STDIAG (17)
  721. ssm 0,0
  722. b,n perf_rdr_shift_out_W_leave
  723. nop
  724. ssm 0,0
  725. nop
  726. ;
  727. ; RDR 18 write sequence
  728. ;
  729. sync
  730. ssm 0,0
  731. STDIAG (18)
  732. ssm 0,0
  733. b,n perf_rdr_shift_out_W_leave
  734. nop
  735. ssm 0,0
  736. nop
  737. ;
  738. ; RDR 19 write sequence
  739. ;
  740. sync
  741. ssm 0,0
  742. STDIAG (19)
  743. ssm 0,0
  744. b,n perf_rdr_shift_out_W_leave
  745. nop
  746. ssm 0,0
  747. nop
  748. ;
  749. ; RDR 20 write sequence
  750. ;
  751. sync
  752. ssm 0,0
  753. STDIAG (20)
  754. ssm 0,0
  755. b,n perf_rdr_shift_out_W_leave
  756. nop
  757. ssm 0,0
  758. nop
  759. ;
  760. ; RDR 21 write sequence
  761. ;
  762. sync
  763. ssm 0,0
  764. STDIAG (21)
  765. ssm 0,0
  766. b,n perf_rdr_shift_out_W_leave
  767. nop
  768. ssm 0,0
  769. nop
  770. ;
  771. ; RDR 22 write sequence
  772. ;
  773. sync
  774. ssm 0,0
  775. STDIAG (22)
  776. ssm 0,0
  777. b,n perf_rdr_shift_out_W_leave
  778. nop
  779. ssm 0,0
  780. nop
  781. ;
  782. ; RDR 23 write sequence
  783. ;
  784. sync
  785. ssm 0,0
  786. STDIAG (23)
  787. ssm 0,0
  788. b,n perf_rdr_shift_out_W_leave
  789. nop
  790. ssm 0,0
  791. nop
  792. ;
  793. ; RDR 24 write sequence
  794. ;
  795. sync
  796. ssm 0,0
  797. STDIAG (24)
  798. ssm 0,0
  799. b,n perf_rdr_shift_out_W_leave
  800. nop
  801. ssm 0,0
  802. nop
  803. ;
  804. ; RDR 25 write sequence
  805. ;
  806. sync
  807. ssm 0,0
  808. STDIAG (25)
  809. ssm 0,0
  810. b,n perf_rdr_shift_out_W_leave
  811. nop
  812. ssm 0,0
  813. nop
  814. ;
  815. ; RDR 26 write sequence
  816. ;
  817. sync
  818. ssm 0,0
  819. STDIAG (10)
  820. STDIAG (26)
  821. ssm 0,0
  822. b,n perf_rdr_shift_out_W_leave
  823. ssm 0,0
  824. nop
  825. ;
  826. ; RDR 27 write sequence
  827. ;
  828. sync
  829. ssm 0,0
  830. STDIAG (11)
  831. STDIAG (27)
  832. ssm 0,0
  833. b,n perf_rdr_shift_out_W_leave
  834. ssm 0,0
  835. nop
  836. ;
  837. ; RDR 28 write sequence
  838. ;
  839. sync
  840. ssm 0,0
  841. STDIAG (28)
  842. ssm 0,0
  843. b,n perf_rdr_shift_out_W_leave
  844. nop
  845. ssm 0,0
  846. nop
  847. ;
  848. ; RDR 29 write sequence
  849. ;
  850. sync
  851. ssm 0,0
  852. STDIAG (29)
  853. ssm 0,0
  854. b,n perf_rdr_shift_out_W_leave
  855. nop
  856. ssm 0,0
  857. nop
  858. ;
  859. ; RDR 30 write sequence
  860. ;
  861. sync
  862. ssm 0,0
  863. STDIAG (30)
  864. ssm 0,0
  865. b,n perf_rdr_shift_out_W_leave
  866. nop
  867. ssm 0,0
  868. nop
  869. ;
  870. ; RDR 31 write sequence
  871. ;
  872. sync
  873. ssm 0,0
  874. STDIAG (31)
  875. ssm 0,0
  876. b,n perf_rdr_shift_out_W_leave
  877. nop
  878. ssm 0,0
  879. nop
  880. perf_rdr_shift_out_W_leave:
  881. bve (%r2)
  882. .exit
  883. MTDIAG_2 (23) ; restore DR2
  884. .procend
  885. ENDPROC(perf_rdr_shift_out_W)
  886. ;***********************************************************************
  887. ;*
  888. ;* Name: rdr_shift_in_U
  889. ;*
  890. ;* Description:
  891. ;* This routine shifts data in from the RDR in arg0 and returns
  892. ;* the result in ret0. If the RDR is <= 64 bits in length, it
  893. ;* is shifted shifted backup immediately. This is to compensate
  894. ;* for RDR10 which has bits that preclude PDC stack operations
  895. ;* when they are in the wrong state.
  896. ;*
  897. ;* Arguments:
  898. ;* arg0 : rdr to be read
  899. ;* arg1 : bit length of rdr
  900. ;*
  901. ;* Returns:
  902. ;* ret0 = next 64 bits of rdr data from staging register
  903. ;*
  904. ;* Register usage:
  905. ;* arg0 : rdr to be read
  906. ;* arg1 : bit length of rdr
  907. ;* %r24 - original DR2 value
  908. ;* %r23 - DR2 | DR2_SLOW_RET
  909. ;* %r1 - scratch
  910. ;*
  911. ;***********************************************************************
  912. ENTRY(perf_rdr_shift_in_U)
  913. .proc
  914. .callinfo frame=0,NO_CALLS
  915. .entry
  916. ; read(shift in) the RDR.
  917. ;
  918. ; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
  919. ; shifting is done, from or to, remote diagnose registers.
  920. depdi,z 1,DR2_SLOW_RET,1,%r29
  921. MFDIAG_2 (24)
  922. or %r24,%r29,%r29
  923. MTDIAG_2 (29) ; set DR2_SLOW_RET
  924. nop
  925. nop
  926. nop
  927. nop
  928. ;
  929. ; Start of next 32-byte cacheline
  930. ;
  931. nop
  932. nop
  933. nop
  934. extrd,u arg1,63,6,%r1
  935. mtsar %r1
  936. shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
  937. blr %r1,%r0 ; branch to 8-instruction sequence
  938. nop
  939. ;
  940. ; Start of next 32-byte cacheline
  941. ;
  942. SFDIAG (0) ; RDR 0 read sequence
  943. ssm 0,0
  944. MFDIAG_1 (28)
  945. shrpd ret0,%r0,%sar,%r1
  946. MTDIAG_1 (1)
  947. STDIAG (0)
  948. ssm 0,0
  949. b,n perf_rdr_shift_in_U_leave
  950. SFDIAG (1) ; RDR 1 read sequence
  951. ssm 0,0
  952. MFDIAG_1 (28)
  953. shrpd ret0,%r0,%sar,%r1
  954. MTDIAG_1 (1)
  955. STDIAG (1)
  956. ssm 0,0
  957. b,n perf_rdr_shift_in_U_leave
  958. sync ; RDR 2 read sequence
  959. ssm 0,0
  960. SFDIAG (4)
  961. ssm 0,0
  962. MFDIAG_1 (28)
  963. b,n perf_rdr_shift_in_U_leave
  964. ssm 0,0
  965. nop
  966. sync ; RDR 3 read sequence
  967. ssm 0,0
  968. SFDIAG (3)
  969. ssm 0,0
  970. MFDIAG_1 (28)
  971. b,n perf_rdr_shift_in_U_leave
  972. ssm 0,0
  973. nop
  974. sync ; RDR 4 read sequence
  975. ssm 0,0
  976. SFDIAG (4)
  977. ssm 0,0
  978. MFDIAG_1 (28)
  979. b,n perf_rdr_shift_in_U_leave
  980. ssm 0,0
  981. nop
  982. sync ; RDR 5 read sequence
  983. ssm 0,0
  984. SFDIAG (5)
  985. ssm 0,0
  986. MFDIAG_1 (28)
  987. b,n perf_rdr_shift_in_U_leave
  988. ssm 0,0
  989. nop
  990. sync ; RDR 6 read sequence
  991. ssm 0,0
  992. SFDIAG (6)
  993. ssm 0,0
  994. MFDIAG_1 (28)
  995. b,n perf_rdr_shift_in_U_leave
  996. ssm 0,0
  997. nop
  998. sync ; RDR 7 read sequence
  999. ssm 0,0
  1000. SFDIAG (7)
  1001. ssm 0,0
  1002. MFDIAG_1 (28)
  1003. b,n perf_rdr_shift_in_U_leave
  1004. ssm 0,0
  1005. nop
  1006. b,n perf_rdr_shift_in_U_leave
  1007. nop
  1008. nop
  1009. nop
  1010. nop
  1011. nop
  1012. nop
  1013. nop
  1014. SFDIAG (9) ; RDR 9 read sequence
  1015. ssm 0,0
  1016. MFDIAG_1 (28)
  1017. shrpd ret0,%r0,%sar,%r1
  1018. MTDIAG_1 (1)
  1019. STDIAG (9)
  1020. ssm 0,0
  1021. b,n perf_rdr_shift_in_U_leave
  1022. SFDIAG (10) ; RDR 10 read sequence
  1023. ssm 0,0
  1024. MFDIAG_1 (28)
  1025. shrpd ret0,%r0,%sar,%r1
  1026. MTDIAG_1 (1)
  1027. STDIAG (10)
  1028. ssm 0,0
  1029. b,n perf_rdr_shift_in_U_leave
  1030. SFDIAG (11) ; RDR 11 read sequence
  1031. ssm 0,0
  1032. MFDIAG_1 (28)
  1033. shrpd ret0,%r0,%sar,%r1
  1034. MTDIAG_1 (1)
  1035. STDIAG (11)
  1036. ssm 0,0
  1037. b,n perf_rdr_shift_in_U_leave
  1038. SFDIAG (12) ; RDR 12 read sequence
  1039. ssm 0,0
  1040. MFDIAG_1 (28)
  1041. shrpd ret0,%r0,%sar,%r1
  1042. MTDIAG_1 (1)
  1043. STDIAG (12)
  1044. ssm 0,0
  1045. b,n perf_rdr_shift_in_U_leave
  1046. SFDIAG (13) ; RDR 13 read sequence
  1047. ssm 0,0
  1048. MFDIAG_1 (28)
  1049. shrpd ret0,%r0,%sar,%r1
  1050. MTDIAG_1 (1)
  1051. STDIAG (13)
  1052. ssm 0,0
  1053. b,n perf_rdr_shift_in_U_leave
  1054. SFDIAG (14) ; RDR 14 read sequence
  1055. ssm 0,0
  1056. MFDIAG_1 (28)
  1057. shrpd ret0,%r0,%sar,%r1
  1058. MTDIAG_1 (1)
  1059. STDIAG (14)
  1060. ssm 0,0
  1061. b,n perf_rdr_shift_in_U_leave
  1062. SFDIAG (15) ; RDR 15 read sequence
  1063. ssm 0,0
  1064. MFDIAG_1 (28)
  1065. shrpd ret0,%r0,%sar,%r1
  1066. MTDIAG_1 (1)
  1067. STDIAG (15)
  1068. ssm 0,0
  1069. b,n perf_rdr_shift_in_U_leave
  1070. sync ; RDR 16 read sequence
  1071. ssm 0,0
  1072. SFDIAG (16)
  1073. ssm 0,0
  1074. MFDIAG_1 (28)
  1075. b,n perf_rdr_shift_in_U_leave
  1076. ssm 0,0
  1077. nop
  1078. SFDIAG (17) ; RDR 17 read sequence
  1079. ssm 0,0
  1080. MFDIAG_1 (28)
  1081. shrpd ret0,%r0,%sar,%r1
  1082. MTDIAG_1 (1)
  1083. STDIAG (17)
  1084. ssm 0,0
  1085. b,n perf_rdr_shift_in_U_leave
  1086. SFDIAG (18) ; RDR 18 read sequence
  1087. ssm 0,0
  1088. MFDIAG_1 (28)
  1089. shrpd ret0,%r0,%sar,%r1
  1090. MTDIAG_1 (1)
  1091. STDIAG (18)
  1092. ssm 0,0
  1093. b,n perf_rdr_shift_in_U_leave
  1094. b,n perf_rdr_shift_in_U_leave
  1095. nop
  1096. nop
  1097. nop
  1098. nop
  1099. nop
  1100. nop
  1101. nop
  1102. sync ; RDR 20 read sequence
  1103. ssm 0,0
  1104. SFDIAG (20)
  1105. ssm 0,0
  1106. MFDIAG_1 (28)
  1107. b,n perf_rdr_shift_in_U_leave
  1108. ssm 0,0
  1109. nop
  1110. sync ; RDR 21 read sequence
  1111. ssm 0,0
  1112. SFDIAG (21)
  1113. ssm 0,0
  1114. MFDIAG_1 (28)
  1115. b,n perf_rdr_shift_in_U_leave
  1116. ssm 0,0
  1117. nop
  1118. sync ; RDR 22 read sequence
  1119. ssm 0,0
  1120. SFDIAG (22)
  1121. ssm 0,0
  1122. MFDIAG_1 (28)
  1123. b,n perf_rdr_shift_in_U_leave
  1124. ssm 0,0
  1125. nop
  1126. sync ; RDR 23 read sequence
  1127. ssm 0,0
  1128. SFDIAG (23)
  1129. ssm 0,0
  1130. MFDIAG_1 (28)
  1131. b,n perf_rdr_shift_in_U_leave
  1132. ssm 0,0
  1133. nop
  1134. sync ; RDR 24 read sequence
  1135. ssm 0,0
  1136. SFDIAG (24)
  1137. ssm 0,0
  1138. MFDIAG_1 (28)
  1139. b,n perf_rdr_shift_in_U_leave
  1140. ssm 0,0
  1141. nop
  1142. sync ; RDR 25 read sequence
  1143. ssm 0,0
  1144. SFDIAG (25)
  1145. ssm 0,0
  1146. MFDIAG_1 (28)
  1147. b,n perf_rdr_shift_in_U_leave
  1148. ssm 0,0
  1149. nop
  1150. SFDIAG (26) ; RDR 26 read sequence
  1151. ssm 0,0
  1152. MFDIAG_1 (28)
  1153. shrpd ret0,%r0,%sar,%r1
  1154. MTDIAG_1 (1)
  1155. STDIAG (26)
  1156. ssm 0,0
  1157. b,n perf_rdr_shift_in_U_leave
  1158. SFDIAG (27) ; RDR 27 read sequence
  1159. ssm 0,0
  1160. MFDIAG_1 (28)
  1161. shrpd ret0,%r0,%sar,%r1
  1162. MTDIAG_1 (1)
  1163. STDIAG (27)
  1164. ssm 0,0
  1165. b,n perf_rdr_shift_in_U_leave
  1166. sync ; RDR 28 read sequence
  1167. ssm 0,0
  1168. SFDIAG (28)
  1169. ssm 0,0
  1170. MFDIAG_1 (28)
  1171. b,n perf_rdr_shift_in_U_leave
  1172. ssm 0,0
  1173. nop
  1174. b,n perf_rdr_shift_in_U_leave
  1175. nop
  1176. nop
  1177. nop
  1178. nop
  1179. nop
  1180. nop
  1181. nop
  1182. SFDIAG (30) ; RDR 30 read sequence
  1183. ssm 0,0
  1184. MFDIAG_1 (28)
  1185. shrpd ret0,%r0,%sar,%r1
  1186. MTDIAG_1 (1)
  1187. STDIAG (30)
  1188. ssm 0,0
  1189. b,n perf_rdr_shift_in_U_leave
  1190. SFDIAG (31) ; RDR 31 read sequence
  1191. ssm 0,0
  1192. MFDIAG_1 (28)
  1193. shrpd ret0,%r0,%sar,%r1
  1194. MTDIAG_1 (1)
  1195. STDIAG (31)
  1196. ssm 0,0
  1197. b,n perf_rdr_shift_in_U_leave
  1198. nop
  1199. perf_rdr_shift_in_U_leave:
  1200. bve (%r2)
  1201. .exit
  1202. MTDIAG_2 (24) ; restore DR2
  1203. .procend
  1204. ENDPROC(perf_rdr_shift_in_U)
  1205. ;***********************************************************************
  1206. ;*
  1207. ;* Name: rdr_shift_out_U
  1208. ;*
  1209. ;* Description:
  1210. ;* This routine moves data to the RDR's. The double-word that
  1211. ;* arg1 points to is loaded and moved into the staging register.
  1212. ;* Then the STDIAG instruction for the RDR # in arg0 is called
  1213. ;* to move the data to the RDR.
  1214. ;*
  1215. ;* Arguments:
  1216. ;* arg0 = rdr target
  1217. ;* arg1 = buffer pointer
  1218. ;*
  1219. ;* Returns:
  1220. ;* None
  1221. ;*
  1222. ;* Register usage:
  1223. ;* arg0 = rdr target
  1224. ;* arg1 = buffer pointer
  1225. ;* %r24 - DR2 | DR2_SLOW_RET
  1226. ;* %r23 - original DR2 value
  1227. ;*
  1228. ;***********************************************************************
  1229. ENTRY(perf_rdr_shift_out_U)
  1230. .proc
  1231. .callinfo frame=0,NO_CALLS
  1232. .entry
  1233. ;
  1234. ; NOTE: The PCX-U ERS states that DR2_SLOW_RET must be set before any
  1235. ; shifting is done, from or to, the remote diagnose registers.
  1236. ;
  1237. depdi,z 1,DR2_SLOW_RET,1,%r24
  1238. MFDIAG_2 (23)
  1239. or %r24,%r23,%r24
  1240. MTDIAG_2 (24) ; set DR2_SLOW_RET
  1241. MTDIAG_1 (25) ; data to the staging register
  1242. shladd arg0,2,%r0,%r1 ; %r1 = 4 * RDR number
  1243. blr %r1,%r0 ; branch to 8-instruction sequence
  1244. nop
  1245. ;
  1246. ; 32-byte cachline aligned
  1247. ;
  1248. sync ; RDR 0 write sequence
  1249. ssm 0,0
  1250. STDIAG (0)
  1251. ssm 0,0
  1252. b,n perf_rdr_shift_out_U_leave
  1253. nop
  1254. ssm 0,0
  1255. nop
  1256. sync ; RDR 1 write sequence
  1257. ssm 0,0
  1258. STDIAG (1)
  1259. ssm 0,0
  1260. b,n perf_rdr_shift_out_U_leave
  1261. nop
  1262. ssm 0,0
  1263. nop
  1264. sync ; RDR 2 write sequence
  1265. ssm 0,0
  1266. STDIAG (2)
  1267. ssm 0,0
  1268. b,n perf_rdr_shift_out_U_leave
  1269. nop
  1270. ssm 0,0
  1271. nop
  1272. sync ; RDR 3 write sequence
  1273. ssm 0,0
  1274. STDIAG (3)
  1275. ssm 0,0
  1276. b,n perf_rdr_shift_out_U_leave
  1277. nop
  1278. ssm 0,0
  1279. nop
  1280. sync ; RDR 4 write sequence
  1281. ssm 0,0
  1282. STDIAG (4)
  1283. ssm 0,0
  1284. b,n perf_rdr_shift_out_U_leave
  1285. nop
  1286. ssm 0,0
  1287. nop
  1288. sync ; RDR 5 write sequence
  1289. ssm 0,0
  1290. STDIAG (5)
  1291. ssm 0,0
  1292. b,n perf_rdr_shift_out_U_leave
  1293. nop
  1294. ssm 0,0
  1295. nop
  1296. sync ; RDR 6 write sequence
  1297. ssm 0,0
  1298. STDIAG (6)
  1299. ssm 0,0
  1300. b,n perf_rdr_shift_out_U_leave
  1301. nop
  1302. ssm 0,0
  1303. nop
  1304. sync ; RDR 7 write sequence
  1305. ssm 0,0
  1306. STDIAG (7)
  1307. ssm 0,0
  1308. b,n perf_rdr_shift_out_U_leave
  1309. nop
  1310. ssm 0,0
  1311. nop
  1312. sync ; RDR 8 write sequence
  1313. ssm 0,0
  1314. STDIAG (8)
  1315. ssm 0,0
  1316. b,n perf_rdr_shift_out_U_leave
  1317. nop
  1318. ssm 0,0
  1319. nop
  1320. sync ; RDR 9 write sequence
  1321. ssm 0,0
  1322. STDIAG (9)
  1323. ssm 0,0
  1324. b,n perf_rdr_shift_out_U_leave
  1325. nop
  1326. ssm 0,0
  1327. nop
  1328. sync ; RDR 10 write sequence
  1329. ssm 0,0
  1330. STDIAG (10)
  1331. ssm 0,0
  1332. b,n perf_rdr_shift_out_U_leave
  1333. nop
  1334. ssm 0,0
  1335. nop
  1336. sync ; RDR 11 write sequence
  1337. ssm 0,0
  1338. STDIAG (11)
  1339. ssm 0,0
  1340. b,n perf_rdr_shift_out_U_leave
  1341. nop
  1342. ssm 0,0
  1343. nop
  1344. sync ; RDR 12 write sequence
  1345. ssm 0,0
  1346. STDIAG (12)
  1347. ssm 0,0
  1348. b,n perf_rdr_shift_out_U_leave
  1349. nop
  1350. ssm 0,0
  1351. nop
  1352. sync ; RDR 13 write sequence
  1353. ssm 0,0
  1354. STDIAG (13)
  1355. ssm 0,0
  1356. b,n perf_rdr_shift_out_U_leave
  1357. nop
  1358. ssm 0,0
  1359. nop
  1360. sync ; RDR 14 write sequence
  1361. ssm 0,0
  1362. STDIAG (14)
  1363. ssm 0,0
  1364. b,n perf_rdr_shift_out_U_leave
  1365. nop
  1366. ssm 0,0
  1367. nop
  1368. sync ; RDR 15 write sequence
  1369. ssm 0,0
  1370. STDIAG (15)
  1371. ssm 0,0
  1372. b,n perf_rdr_shift_out_U_leave
  1373. nop
  1374. ssm 0,0
  1375. nop
  1376. sync ; RDR 16 write sequence
  1377. ssm 0,0
  1378. STDIAG (16)
  1379. ssm 0,0
  1380. b,n perf_rdr_shift_out_U_leave
  1381. nop
  1382. ssm 0,0
  1383. nop
  1384. sync ; RDR 17 write sequence
  1385. ssm 0,0
  1386. STDIAG (17)
  1387. ssm 0,0
  1388. b,n perf_rdr_shift_out_U_leave
  1389. nop
  1390. ssm 0,0
  1391. nop
  1392. sync ; RDR 18 write sequence
  1393. ssm 0,0
  1394. STDIAG (18)
  1395. ssm 0,0
  1396. b,n perf_rdr_shift_out_U_leave
  1397. nop
  1398. ssm 0,0
  1399. nop
  1400. sync ; RDR 19 write sequence
  1401. ssm 0,0
  1402. STDIAG (19)
  1403. ssm 0,0
  1404. b,n perf_rdr_shift_out_U_leave
  1405. nop
  1406. ssm 0,0
  1407. nop
  1408. sync ; RDR 20 write sequence
  1409. ssm 0,0
  1410. STDIAG (20)
  1411. ssm 0,0
  1412. b,n perf_rdr_shift_out_U_leave
  1413. nop
  1414. ssm 0,0
  1415. nop
  1416. sync ; RDR 21 write sequence
  1417. ssm 0,0
  1418. STDIAG (21)
  1419. ssm 0,0
  1420. b,n perf_rdr_shift_out_U_leave
  1421. nop
  1422. ssm 0,0
  1423. nop
  1424. sync ; RDR 22 write sequence
  1425. ssm 0,0
  1426. STDIAG (22)
  1427. ssm 0,0
  1428. b,n perf_rdr_shift_out_U_leave
  1429. nop
  1430. ssm 0,0
  1431. nop
  1432. sync ; RDR 23 write sequence
  1433. ssm 0,0
  1434. STDIAG (23)
  1435. ssm 0,0
  1436. b,n perf_rdr_shift_out_U_leave
  1437. nop
  1438. ssm 0,0
  1439. nop
  1440. sync ; RDR 24 write sequence
  1441. ssm 0,0
  1442. STDIAG (24)
  1443. ssm 0,0
  1444. b,n perf_rdr_shift_out_U_leave
  1445. nop
  1446. ssm 0,0
  1447. nop
  1448. sync ; RDR 25 write sequence
  1449. ssm 0,0
  1450. STDIAG (25)
  1451. ssm 0,0
  1452. b,n perf_rdr_shift_out_U_leave
  1453. nop
  1454. ssm 0,0
  1455. nop
  1456. sync ; RDR 26 write sequence
  1457. ssm 0,0
  1458. STDIAG (26)
  1459. ssm 0,0
  1460. b,n perf_rdr_shift_out_U_leave
  1461. nop
  1462. ssm 0,0
  1463. nop
  1464. sync ; RDR 27 write sequence
  1465. ssm 0,0
  1466. STDIAG (27)
  1467. ssm 0,0
  1468. b,n perf_rdr_shift_out_U_leave
  1469. nop
  1470. ssm 0,0
  1471. nop
  1472. sync ; RDR 28 write sequence
  1473. ssm 0,0
  1474. STDIAG (28)
  1475. ssm 0,0
  1476. b,n perf_rdr_shift_out_U_leave
  1477. nop
  1478. ssm 0,0
  1479. nop
  1480. sync ; RDR 29 write sequence
  1481. ssm 0,0
  1482. STDIAG (29)
  1483. ssm 0,0
  1484. b,n perf_rdr_shift_out_U_leave
  1485. nop
  1486. ssm 0,0
  1487. nop
  1488. sync ; RDR 30 write sequence
  1489. ssm 0,0
  1490. STDIAG (30)
  1491. ssm 0,0
  1492. b,n perf_rdr_shift_out_U_leave
  1493. nop
  1494. ssm 0,0
  1495. nop
  1496. sync ; RDR 31 write sequence
  1497. ssm 0,0
  1498. STDIAG (31)
  1499. ssm 0,0
  1500. b,n perf_rdr_shift_out_U_leave
  1501. nop
  1502. ssm 0,0
  1503. nop
  1504. perf_rdr_shift_out_U_leave:
  1505. bve (%r2)
  1506. .exit
  1507. MTDIAG_2 (23) ; restore DR2
  1508. .procend
  1509. ENDPROC(perf_rdr_shift_out_U)