Télécharger ooomtx.eso

Retour à la liste

Numérotation des lignes :

ooomtx
  1. C OOOMTX SOURCE PV090527 26/04/24 08:23:17 12524
  2. SUBROUTINE OOOMTX (IZ,IS,LS,LSG,iro)
  3. C-------------------------------------------------------------------
  4. C
  5. C TASSER UNE PORTION DE MEMOIRE
  6. C
  7. C IZ INDICE DE LA ZONE MEMOIRE
  8. C IS INDICE DU DEBUT DE LA PORTION A TASSER
  9. C LS LONGUEUR DE LA PORTION
  10. C LSG LONGUEUR DU TROU RECHERCHE
  11. C LSO LONGUEUR DU TROU OBTENU
  12. C
  13. C ->IS INDICE DU TROU RESULTANT
  14. C ->LS LONGUEUR DU TROU RESULTANT
  15. C
  16. C
  17. C LE TASSEMENT DES BLOCS ATTRIBUES SE FAIT AVEC MISE A JOUR DU
  18. C PREMIER MOT DES DESCRIPTEURS . IL SE FAIT EN DEPLACANT LES BLOCS
  19. C ATTRIBUES VERS LES ADRESSES BASSES POUR ASSURER LA FIXITE DU
  20. C SEGMENT DES DESCRIPTEURS
  21. C
  22. C HYPOTHESE :
  23. C
  24. C IL N'Y A PAS DE SEGMENTS FIXES DANS LA PORTION DE MEMOIRE
  25. C
  26. C ON S'ARRETE DES QUE ON A PU CREER UN TROU SUFFISANT
  27. C
  28. C-----------------------------------------------------------------------
  29. C
  30. C PRINCIPALES VARIABLES:
  31. C
  32. C IS POSITION ATTEINTE APRES TASSEMENT DU PAQUET DE SGM PRECEDENT
  33. C (EN FINALE INDICE DU TROU RESTANT)
  34. C JS INDICE DU 1EME SEGMENT DU PAQUET QUI SUIT LE TROU QUI VIENT
  35. C D'ETRE TASSE
  36. C KS INDICE DE DEBUT DES SEGMENTS DU PAQUET A TASSER
  37. C (EN FIN DE PAQUET-->INDICE DU TROU QUI SUIT LE PAQUET)
  38. C LS CUMUL DES LG DES TROUS=VALEUR DE LA TRANSLATION A FAIRE
  39. C SUBIRE EN MEMOIRE AU PAQUET DE SEGM A TASSER
  40. C (EN FINALE-->LG DU TROU RESULTANT)
  41. C (AU DEBUT LG DU TROU A CREER)
  42. * iro = 0 on deplace les segments actifs
  43. * iro = 1 on ne deplace pas les segments actifs
  44. C-----------------------------------------------------------------------
  45. C
  46. %INC IOOADR
  47. %INC IOOADZ
  48. %INC IOODES
  49. %INC IOOTRO
  50. %INC IOOSGM
  51. %INC IOOTF2
  52. %INC IOOSAF
  53. INTEGER BLKMSK1,BLKMSK2
  54. *
  55. * recuperer le masque des threads bloques
  56. blkmsk1=0
  57. blkmsk2=0
  58. call ooombl(blkmsk1,blkmsk2)
  59. if (oothrd+1.lt.64) blkmsk1=ibset(blkmsk1,oothrd+1)
  60. if (oothrd+1.ge.64) blkmsk2=ibset(blkmsk2,oothrd+1-64)
  61. * write(6,'(A16,Z16)') 'blkmsk ooomtx ',blkmsk
  62.  
  63. C
  64. C****** DEBUT:IS POINTE SUR DEBUT DE LA PORTION MEMOIRE:
  65. C
  66. * write (6,*) ' mtx appele iro ',iro
  67. IPASS=1
  68. ISMAX = IS+LS
  69. IS=MZPRTR
  70. LS = 0
  71. LSX = 0
  72. C
  73. C****** DEBUT TRAITEMENT D'UN PAQUET DE SGM:
  74. C
  75. 10 JS = IS+LS
  76. ifix=0
  77.  
  78. if(iro.ne.0) then
  79. iro=0
  80. ** write (6,*) 'ooomta lnsf',(lnsf(i),i=0,64)
  81. do i=0,128
  82. if (i.ne.oothrd) then
  83. ** if (lnsf(i).eq.1) write(6,*) 'i lnsf ',i,lnsf(i)
  84. ** if (lnsf(i).eq.1) lnsf(-2**55)=2
  85. iro=max(iro,lnsf(i))
  86. endif
  87. enddo
  88. endif
  89. ** write(6,*) 'iro dans ooomtx',iro,js
  90.  
  91.  
  92.  
  93. KS = JS
  94. IF (KS.GE.ISMAX.AND.IPASS.EQ.2) GO TO 50
  95. C******** DEBUT TRT D' UN SGM DU PAQUET
  96. C A T ON ATTEINT UN TROU ou un segment inamovible?
  97. DO WHILE (.NOT. MTROU(KS).AND.KS.NE.ISMAX)
  98. * on peut tasser si on est le seul a lire le segment
  99. if(ls.ne.0..and.iro.eq.1.and.
  100. > ((and(mdro1(mside(ks)),not(blkmsk1)).ne.0).or.
  101. > (and(mdro2(mside(ks)),not(blkmsk2)).ne.0))) ifix=1
  102. LSX=MSLS1(KS)
  103. if (lsx.eq.0) write (6,*) ' lsx=0 dans ooomtx ks= ',ks
  104. if (lsx.eq.0) stop 12
  105. KS=KS+LSX
  106. IF (KS.GE.ISMAX.AND.IPASS.EQ.2) GO TO 50
  107. if (ks.gt.ismax) write (6,*) ' ooomtx ks ismax ',ks,ismax
  108. ENDDO
  109. if (ifix.eq.1) write(6,*) 'segment fixe dans ooomtx'
  110.  
  111.  
  112. * si pas assez de gain
  113. ** if (ls+lsx.lt.(ks-js)/250.and.is.eq.js) then
  114. ** write (6,*) ' ooomtx trou paquet ',ls+lsx,ks-js
  115. ** ifix=1
  116. ** endif
  117.  
  118.  
  119.  
  120.  
  121.  
  122. C
  123. C************ TASSEMENT D'UN PAQUET DE SGM
  124. C
  125. if (ifix.eq.0) then
  126. MTITS(MTITP(KS))=MTITS(KS)
  127. MTITP(MTITS(KS))=MTITP(KS)
  128. C SI LS=0,TASSEMENT INUTILE
  129. IF (LS.NE.0) THEN
  130. I2=KS-JS
  131. if (is.ne.js) then
  132. call OOOZMV (JSG(JS+1),JSG(IS+1),I2)
  133. * write (6,*) ' ooomtx paquet deplace ',
  134. * > i2,ls
  135. MZJSM(DEPLACES) = MZJSM(DEPLACES)+I2
  136. endif
  137. ISF = IS+I2
  138. ISX = IS
  139. DO WHILE (ISX.LT.ISF)
  140. LSX = MSLS1(ISX)
  141. IDX = MSIDE(ISX)
  142. MDISG(IDX) = ISX
  143. if (is.ne.js) MZJSS(DEPLACES)=MZJSS(DEPLACES)+1
  144. ISX=ISX+LSX
  145. ENDDO
  146. ENDIF
  147. else
  148. * virer le trou puisqu'on ecrira dedans
  149. LSX=-MTLT1(KS)
  150. ISX=KS
  151. MTITS(MTITP(KS))=MTITS(KS)
  152. MTITP(MTITS(KS))=MTITP(KS)
  153. * insertion d'un trou avant le paquet inamovible
  154. * write (6,*) ' ooomtx paquet inamovible ',
  155. * > is,ls
  156. if (ls.ne.0) then
  157. CALL OOOZMR (JSG(IS+1),LS)
  158. MZITS0(IZ,ZMEMDYN)=MZIT0(IZ,ZMEMDYN)
  159. MTF2 , IZ(ZMEMDYN,IS,LS)
  160. MZITS0(IZ,ZMEMDYN)=IS
  161. endif
  162. LS=LSX
  163. IS=ISX
  164. goto 10
  165. endif
  166. C
  167. C****** REVALUATION DE IS ET LS POUR LE PAQUET SUIVANT
  168. C
  169. IS=KS-LS
  170. LS=LS-MTLT1(KS)
  171. IF (KS.GE.ISMAX) THEN
  172.  
  173. IF (LS.NE.0) THEN
  174. CALL OOOZMR (JSG(IS+1),LS)
  175. MZITS0(IZ,ZMEMDYN)=MZIT0(IZ,ZMEMDYN)
  176. MTF2 , IZ(ZMEMDYN,IS,LS)
  177. MZITS0(IZ,ZMEMDYN)=IS
  178. ENDIF
  179. IPASS=2
  180. IS=MZIS0(IZA)
  181. LS=0
  182. GOTO 10
  183. ENDIF
  184. IF (LS.LT.LSG) GO TO 10
  185. * on essaye de faire un trou un peu plus grand pour faire moins souvent des tassements
  186. ** IF (mod(IS-MZPRTR,mzlen(IZA)).LT.int(MZLEN(IZA)*0.1)) GO TO 10
  187. IF (LS.LT.int(MZLEN(IZA)*0.05).and.ipass.lt.2) GO TO 10
  188. C
  189. C****** RAZ TROU RESULTANT DU TASSEMENT
  190. C
  191. 50 CONTINUE
  192. MZPRTR=IS+LS
  193. IF (LS.NE.0) THEN
  194. CALL OOOZMR (JSG(IS+1),LS)
  195. MZITS0(IZ,ZMEMDYN)=MZIT0(IZ,ZMEMDYN)
  196. MTF2 , IZ(ZMEMDYN,IS,LS)
  197. MZITS0(IZ,ZMEMDYN)=IS
  198. ENDIF
  199. RETURN
  200. END
  201.  
  202.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales