set.inc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by the Free Pascal development team
  5. Include file with set operations called by the compiler
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL}
  13. function fpc_set_load_small(l: fpc_small_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_LOAD_SMALL']; {$ifdef hascompilerproc} compilerproc; {$endif}
  14. {
  15. load a normal set p from a smallset l
  16. }
  17. asm
  18. movl __RESULT,%edi
  19. movl l,%eax
  20. movl $7,%ecx
  21. movl %eax,4(%edi)
  22. addl $4,%edi
  23. xorl %eax,%eax
  24. rep
  25. stosl
  26. end ['EAX','ECX','EDI'];
  27. {$define FPC_SYSTEM_HAS_FPC_SET_CREATE_ELEMENT}
  28. function fpc_set_create_element(b : byte): fpc_normal_set;assembler;[public,alias:'FPC_SET_CREATE_ELEMENT']; {$ifdef hascompilerproc} compilerproc; {$endif}
  29. {
  30. create a new set in p from an element b
  31. }
  32. asm
  33. {$ifndef hascompilerproc}
  34. pushl %eax
  35. pushl %ecx
  36. {$endif not hascompilerproc}
  37. movl __RESULT,%edi
  38. xorl %eax,%eax
  39. movl $8,%ecx
  40. rep
  41. stosl
  42. leal -32(%edi),%eax
  43. movzbl b,%edi
  44. btsl %edi,(%eax)
  45. {$ifndef hascompilerproc}
  46. popl %ecx
  47. popl %eax
  48. {$endif hascompilerproc}
  49. end ['EAX','ECX','EDI'];
  50. {$define FPC_SYSTEM_HAS_FPC_SET_SET_BYTE}
  51. {$ifdef hascompilerproc}
  52. function fpc_set_set_byte(const source: fpc_normal_set; b : byte): fpc_normal_set;assembler; compilerproc;
  53. {
  54. add the element b to the set pointed by source
  55. }
  56. asm
  57. movl $8,%ecx
  58. movl source,%esi
  59. movl __RESULT,%edi
  60. rep
  61. movsl
  62. leal -32(%edi),%eax
  63. movzbl b,%edi
  64. btsl %edi,(%eax)
  65. end ['EAX','ECX','ESI','EDI'];
  66. {$else hascompilerproc}
  67. function fpc_set_set_byte(b : byte): fpc_normal_set;assembler;[public,alias:'FPC_SET_SET_BYTE'];
  68. {
  69. add the element b to the set pointed by p
  70. }
  71. asm
  72. pushl %eax
  73. movl __RESULT,%edi
  74. movb b,%al
  75. andl $0xf8,%eax
  76. shrl $3,%eax
  77. addl %eax,%edi
  78. movb b,%al
  79. andl $7,%eax
  80. btsl %eax,(%edi)
  81. popl %eax
  82. end;
  83. {$endif hascompilerproc}
  84. {$define FPC_SYSTEM_HAS_FPC_SET_UNSET_BYTE}
  85. {$ifdef hascompilerproc}
  86. function fpc_set_unset_byte(const source: fpc_normal_set; b : byte): fpc_normal_set;assembler; compilerproc;
  87. {
  88. add the element b to the set pointed by source
  89. }
  90. asm
  91. movl $8,%ecx
  92. movl source,%esi
  93. movl __RESULT,%edi
  94. rep
  95. movsl
  96. leal -32(%edi),%eax
  97. movzbl b,%edi
  98. btrl %edi,(%eax)
  99. end ['EAX','ECX','ESI','EDI'];
  100. {$else hascompilerproc}
  101. function fpc_set_unset_byte(b : byte): fpc_normal_set;assembler;[public,alias:'FPC_SET_UNSET_BYTE']; {$ifdef hascompilerproc} compilerproc; {$endif}
  102. {
  103. suppresses the element b to the set pointed by p
  104. used for exclude(set,element)
  105. }
  106. asm
  107. pushl %eax
  108. movl __RESULT,%edi
  109. movb b,%al
  110. andl $0xf8,%eax
  111. shrl $3,%eax
  112. addl %eax,%edi
  113. movb b,%al
  114. andl $7,%eax
  115. btrl %eax,(%edi)
  116. popl %eax
  117. end;
  118. {$endif hascompilerproc}
  119. {$define FPC_SYSTEM_HAS_FPC_SET_SET_RANGE}
  120. {$ifdef hascompilerproc}
  121. function fpc_set_set_range(const orgset: fpc_normal_set; l,h : byte): fpc_normal_set;assembler; compilerproc;
  122. {
  123. adds the range [l..h] to the set pointed to by p
  124. }
  125. asm
  126. movzbl l,%eax // lowest bit to be set in eax
  127. movzbl h,%ebx // highest in ebx
  128. movl $8,%ecx // we have to copy 32 bytes
  129. movl __RESULT,%edi // target set address in edi
  130. movl orgset, %esi // source set address in esi
  131. cmpl %eax,%ebx // high < low?
  132. rep // copy source to dest (it's possible to do the range
  133. movsl // setting and copying simultanuously of course, but
  134. // that would result in many more jumps and code)
  135. movl %eax,%ecx // lowest also in ecx
  136. jb .Lset_range_done // if high > low, then dest := source
  137. shrl $3,%eax // divide by 8 to get starting and ending byte
  138. shrl $3,%ebx // address
  139. andb $31,%cl // low five bits of lo determine start of bit mask
  140. andl $0x0fffffffc,%eax // clear two lowest bits to get start/end longint
  141. subl $32,%edi // get back to start of dest
  142. andl $0x0fffffffc,%ebx // address * 4
  143. movl $0x0ffffffff,%edx // edx = bitmask to be inserted
  144. shll %cl,%edx // shift bitmask to clear bits below lo
  145. addl %eax,%edi // go to starting pos in set
  146. subl %eax,%ebx // are bit lo and hi in the same longint?
  147. jz .Lset_range_hi // yes, keep current mask and adjust for hi bit
  148. orl %edx,(%edi) // no, store current mask
  149. movl $0x0ffffffff,%edx // new mask
  150. addl $4,%edi // next longint of set
  151. subl $4,%ebx // bit hi in this longint?
  152. jz .Lset_range_hi // yes, keep full mask and adjust for hi bit
  153. .Lset_range_loop:
  154. movl %edx,(%edi) // no, fill longints in between with full mask
  155. addl $4,%edi
  156. subl $4,%ebx
  157. jnz .Lset_range_loop
  158. .Lset_range_hi:
  159. movb h,%cl
  160. movl %edx,%ebx // save current bitmask
  161. andb $31,%cl
  162. subb $31,%cl // cl := (31 - (hi and 31)) = shift count to
  163. negb %cl // adjust bitmask for hi bit
  164. shrl %cl,%edx // shift bitmask to clear bits higher than hi
  165. andl %edx,%ebx // combine both bitmasks
  166. orl %ebx,(%edi) // store to set
  167. .Lset_range_done:
  168. end;
  169. {$else hascompilerproc}
  170. function fpc_set_set_range(l,h : byte): fpc_normal_set;assembler;[public,alias:'FPC_SET_SET_RANGE'];
  171. {
  172. adds the range [l..h] to the set pointed to by p
  173. }
  174. asm
  175. movzbl l,%eax // lowest bit to be set in eax
  176. movzbl h,%ebx // highest in ebx
  177. cmpl %eax,%ebx
  178. jb .Lset_range_done
  179. movl __RESULT,%edi // set address in edi
  180. movl %eax,%ecx // lowest also in ecx
  181. shrl $3,%eax // divide by 8 to get starting and ending byte
  182. shrl $3,%ebx // address
  183. andb $31,%cl // low five bits of lo determine start of bit mask
  184. movl $0x0ffffffff,%edx // edx = bitmask to be inserted
  185. andl $0x0fffffffc,%eax // clear two lowest bits to get start/end longint
  186. andl $0x0fffffffc,%ebx // address * 4
  187. shll %cl,%edx // shift bitmask to clear bits below lo
  188. addl %eax,%edi // go to starting pos in set
  189. subl %eax,%ebx // are bit lo and hi in the same longint?
  190. jz .Lset_range_hi // yes, keep current mask and adjust for hi bit
  191. orl %edx,(%edi) // no, store current mask
  192. movl $0x0ffffffff,%edx // new mask
  193. addl $4,%edi // next longint of set
  194. subl $4,%ebx // bit hi in this longint?
  195. jz .Lset_range_hi // yes, keep full mask and adjust for hi bit
  196. .Lset_range_loop:
  197. movl %edx,(%edi) // no, fill longints in between with full mask
  198. addl $4,%edi
  199. subl $4,%ebx
  200. jnz .Lset_range_loop
  201. .Lset_range_hi:
  202. movb h,%cl
  203. movl %edx,%ebx // save current bitmask
  204. andb $31,%cl
  205. subb $31,%cl // cl := (31 - (hi and 31)) = shift count to
  206. negb %cl // adjust bitmask for hi bit
  207. shrl %cl,%edx // shift bitmask to clear bits higher than hi
  208. andl %edx,%ebx // combine both bitmasks
  209. orl %ebx,(%edi) // store to set
  210. .Lset_range_done:
  211. end;
  212. {$endif hascompilerproc}
  213. {$define FPC_SYSTEM_HAS_FPC_SET_IN_BYTE}
  214. {$ifdef hascompilerproc}
  215. { it's inlined in the code generator }
  216. function fpc_set_in_byte(const p: fpc_normal_set; b: byte): boolean; compilerproc;
  217. begin
  218. { make sure we won't accidentally call it }
  219. runerror(216);
  220. end;
  221. {$endif hascompilerproc}
  222. function fpc_set_in_byte_i386(p: pointer; b : byte): boolean;assembler;[public,alias:'FPC_SET_IN_BYTE'];
  223. {
  224. tests if the element b is in the set p the carryflag is set if it present
  225. }
  226. asm
  227. { it's inlined in the code generator }
  228. {$ifndef hascompilerproc}
  229. pushl %eax
  230. movl p,%edi
  231. movzbl b,%eax
  232. btl %eax,(%edi)
  233. popl %eax
  234. {$endif not hascompilerproc}
  235. end;
  236. {$define FPC_SYSTEM_HAS_FPC_SET_ADD_SETS}
  237. {$ifdef hascompilerproc}
  238. function fpc_set_add_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_ADD_SETS']; compilerproc;
  239. {$else hascompilerproc}
  240. procedure fpc_set_add_sets(set1,set2,dest : pointer);assembler;[public,alias:'FPC_SET_ADD_SETS'];
  241. {$endif hascompilerproc}
  242. {
  243. adds set1 and set2 into set dest
  244. }
  245. asm
  246. movl set1,%esi
  247. movl set2,%ebx
  248. {$ifdef hascompilerproc}
  249. movl __RESULT,%edi
  250. {$else hascompilerproc}
  251. movl dest,%edi
  252. {$endif hascompilerproc}
  253. movl $8,%ecx
  254. .LMADDSETS1:
  255. lodsl
  256. orl (%ebx),%eax
  257. stosl
  258. addl $4,%ebx
  259. decl %ecx
  260. jnz .LMADDSETS1
  261. end;
  262. {$define FPC_SYSTEM_HAS_FPC_SET_MUL_SETS}
  263. {$ifdef hascompilerproc}
  264. function fpc_set_mul_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_MUL_SETS']; compilerproc;
  265. {$else hascompilerproc}
  266. procedure fpc_set_mul_sets(set1,set2,dest:pointer);assembler;[public,alias:'FPC_SET_MUL_SETS'];
  267. {$endif hascompilerproc}
  268. {
  269. multiplies (takes common elements of) set1 and set2 result put in dest
  270. }
  271. asm
  272. movl set1,%esi
  273. movl set2,%ebx
  274. {$ifdef hascompilerproc}
  275. movl __RESULT,%edi
  276. {$else hascompilerproc}
  277. movl dest,%edi
  278. {$endif hascompilerproc}
  279. movl $8,%ecx
  280. .LMMULSETS1:
  281. lodsl
  282. andl (%ebx),%eax
  283. stosl
  284. addl $4,%ebx
  285. decl %ecx
  286. jnz .LMMULSETS1
  287. end;
  288. {$define FPC_SYSTEM_HAS_FPC_SET_SUB_SETS}
  289. {$ifdef hascompilerproc}
  290. function fpc_set_sub_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_SUB_SETS']; compilerproc;
  291. {$else hascompilerproc}
  292. procedure fpc_set_sub_sets(set1,set2,dest:pointer);assembler;[public,alias:'FPC_SET_SUB_SETS'];
  293. {$endif hascompilerproc}
  294. {
  295. computes the diff from set1 to set2 result in dest
  296. }
  297. asm
  298. movl set1,%esi
  299. movl set2,%ebx
  300. {$ifdef hascompilerproc}
  301. movl __RESULT,%edi
  302. {$else hascompilerproc}
  303. movl dest,%edi
  304. {$endif hascompilerproc}
  305. movl $8,%ecx
  306. .LMSUBSETS1:
  307. lodsl
  308. movl (%ebx),%edx
  309. notl %edx
  310. andl %edx,%eax
  311. stosl
  312. addl $4,%ebx
  313. decl %ecx
  314. jnz .LMSUBSETS1
  315. end;
  316. {$define FPC_SYSTEM_HAS_FPC_SET_SYMDIF_SETS}
  317. {$ifdef hascompilerproc}
  318. function fpc_set_symdif_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_SYMDIF_SETS']; compilerproc;
  319. {$else hascompilerproc}
  320. procedure fpc_set_symdif_sets(set1,set2,dest:pointer);assembler;[public,alias:'FPC_SET_SYMDIF_SETS'];
  321. {$endif hascompilerproc}
  322. {
  323. computes the symetric diff from set1 to set2 result in dest
  324. }
  325. asm
  326. movl set1,%esi
  327. movl set2,%ebx
  328. {$ifdef hascompilerproc}
  329. movl __RESULT,%edi
  330. {$else hascompilerproc}
  331. movl dest,%edi
  332. {$endif hascompilerproc}
  333. movl $8,%ecx
  334. .LMSYMDIFSETS1:
  335. lodsl
  336. movl (%ebx),%edx
  337. xorl %edx,%eax
  338. stosl
  339. addl $4,%ebx
  340. decl %ecx
  341. jnz .LMSYMDIFSETS1
  342. end;
  343. {$define FPC_SYSTEM_HAS_FPC_SET_COMP_SETS}
  344. function fpc_set_comp_sets(const set1,set2: fpc_normal_set): boolean;assembler;[public,alias:'FPC_SET_COMP_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  345. {
  346. compares set1 and set2 zeroflag is set if they are equal
  347. }
  348. asm
  349. movl set1,%esi
  350. movl set2,%edi
  351. movl $8,%ecx
  352. .LMCOMPSETS1:
  353. movl (%esi),%eax
  354. movl (%edi),%edx
  355. cmpl %edx,%eax
  356. jne .LMCOMPSETEND
  357. addl $4,%esi
  358. addl $4,%edi
  359. decl %ecx
  360. jnz .LMCOMPSETS1
  361. { we are here only if the two sets are equal
  362. we have zero flag set, and that what is expected }
  363. .LMCOMPSETEND:
  364. {$ifdef hascompilerproc}
  365. seteb %al
  366. {$endif hascompilerproc}
  367. end;
  368. {$define FPC_SYSTEM_HAS_FPC_SET_CONTAINS_SET}
  369. function fpc_set_contains_sets(const set1,set2: fpc_normal_set): boolean;assembler;[public,alias:'FPC_SET_CONTAINS_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  370. {
  371. on exit, zero flag is set if set1 <= set2 (set2 contains set1)
  372. }
  373. asm
  374. movl set1,%esi
  375. movl set2,%edi
  376. movl $8,%ecx
  377. .LMCONTAINSSETS1:
  378. movl (%esi),%eax
  379. movl (%edi),%edx
  380. andl %eax,%edx
  381. cmpl %edx,%eax {set1 and set2 = set1?}
  382. jne .LMCONTAINSSETEND
  383. addl $4,%esi
  384. addl $4,%edi
  385. decl %ecx
  386. jnz .LMCONTAINSSETS1
  387. { we are here only if set2 contains set1
  388. we have zero flag set, and that what is expected }
  389. .LMCONTAINSSETEND:
  390. {$ifdef hascompilerproc}
  391. seteb %al
  392. {$endif hascompilerproc}
  393. end;
  394. {$ifdef LARGESETS}
  395. procedure fpc_largeset_set_word(p : pointer;b : word);assembler;[public,alias:'FPC_LARGESET_SET_WORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
  396. {
  397. sets the element b in set p works for sets larger than 256 elements
  398. not yet use by the compiler so
  399. }
  400. asm
  401. pushl %eax
  402. movl p,%edi
  403. movw b,%ax
  404. andl $0xfff8,%eax
  405. shrl $3,%eax
  406. addl %eax,%edi
  407. movb 12(%ebp),%al
  408. andl $7,%eax
  409. btsl %eax,(%edi)
  410. popl %eax
  411. end;
  412. procedure fpc_largeset_in_word(p : pointer;b : word);assembler;[public,alias:'FPC_LARGESET_IN_WORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
  413. {
  414. tests if the element b is in the set p the carryflag is set if it present
  415. works for sets larger than 256 elements
  416. }
  417. asm
  418. pushl %eax
  419. movl p,%edi
  420. movw b,%ax
  421. andl $0xfff8,%eax
  422. shrl $3,%eax
  423. addl %eax,%edi
  424. movb 12(%ebp),%al
  425. andl $7,%eax
  426. btl %eax,(%edi)
  427. popl %eax
  428. end;
  429. procedure fpc_largeset_add_sets(set1,set2,dest : pointer;size : longint);assembler;[public,alias:'FPC_LARGESET_ADD_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  430. {
  431. adds set1 and set2 into set dest size is the number of bytes in the set
  432. }
  433. asm
  434. movl set1,%esi
  435. movl set2,%ebx
  436. movl dest,%edi
  437. movl size,%ecx
  438. .LMADDSETSIZES1:
  439. lodsl
  440. orl (%ebx),%eax
  441. stosl
  442. addl $4,%ebx
  443. decl %ecx
  444. jnz .LMADDSETSIZES1
  445. end;
  446. procedure fpc_largeset_mul_sets(set1,set2,dest : pointer;size : longint);assembler;[public,alias:'FPC_LARGESET_MUL_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  447. {
  448. multiplies (i.E. takes common elements of) set1 and set2 result put in
  449. dest size is the number of bytes in the set
  450. }
  451. asm
  452. movl set1,%esi
  453. movl set2,%ebx
  454. movl dest,%edi
  455. movl size,%ecx
  456. .LMMULSETSIZES1:
  457. lodsl
  458. andl (%ebx),%eax
  459. stosl
  460. addl $4,%ebx
  461. decl %ecx
  462. jnz .LMMULSETSIZES1
  463. end;
  464. procedure fpc_largeset_sub_sets(set1,set2,dest : pointer;size : longint);assembler;[public,alias:'FPC_LARGESET_SUB_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  465. asm
  466. movl set1,%esi
  467. movl set2,%ebx
  468. movl dest,%edi
  469. movl size,%ecx
  470. .LMSUBSETSIZES1:
  471. lodsl
  472. movl (%ebx),%edx
  473. notl %edx
  474. andl %edx,%eax
  475. stosl
  476. addl $4,%ebx
  477. decl %ecx
  478. jnz .LMSUBSETSIZES1
  479. end;
  480. procedure fpc_largeset_symdif_sets(set1,set2,dest : pointer;size : longint);assembler;[public,alias:'FPC_LARGESET_SYMDIF_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  481. {
  482. computes the symetric diff from set1 to set2 result in dest
  483. }
  484. asm
  485. movl set1,%esi
  486. movl set2,%ebx
  487. movl dest,%edi
  488. movl size,%ecx
  489. .LMSYMDIFSETSIZE1:
  490. lodsl
  491. movl (%ebx),%edx
  492. xorl %edx,%eax
  493. stosl
  494. addl $4,%ebx
  495. decl %ecx
  496. jnz .LMSYMDIFSETSIZE1
  497. end;
  498. procedure fpc_largeset_comp_sets(set1,set2 : pointer;size : longint);assembler;[public,alias:'FPC_LARGESET_COMP_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  499. asm
  500. movl set1,%esi
  501. movl set2,%edi
  502. movl size,%ecx
  503. .LMCOMPSETSIZES1:
  504. lodsl
  505. movl (%edi),%edx
  506. cmpl %edx,%eax
  507. jne .LMCOMPSETSIZEEND
  508. addl $4,%edi
  509. decl %ecx
  510. jnz .LMCOMPSETSIZES1
  511. { we are here only if the two sets are equal
  512. we have zero flag set, and that what is expected }
  513. .LMCOMPSETSIZEEND:
  514. end;
  515. procedure fpc_largeset_contains_sets(set1,set2 : pointer; size: longint);assembler;[public,alias:'FPC_LARGESET_CONTAINS_SETS']; {$ifdef hascompilerproc} compilerproc; {$endif}
  516. {
  517. on exit, zero flag is set if set1 <= set2 (set2 contains set1)
  518. }
  519. asm
  520. movl set1,%esi
  521. movl set2,%edi
  522. movl size,%ecx
  523. .LMCONTAINSSETS2:
  524. movl (%esi),%eax
  525. movl (%edi),%edx
  526. andl %eax,%edx
  527. cmpl %edx,%eax {set1 and set2 = set1?}
  528. jne .LMCONTAINSSETEND2
  529. addl $4,%esi
  530. addl $4,%edi
  531. decl %ecx
  532. jnz .LMCONTAINSSETS2
  533. { we are here only if set2 contains set1
  534. we have zero flag set, and that what is expected }
  535. .LMCONTAINSSETEND2:
  536. end;
  537. {$endif LARGESET}
  538. {
  539. $Log$
  540. Revision 1.7 2001-09-04 11:38:55 jonas
  541. + searchsystype() and searchsystype() functions in symtable
  542. * changed ninl and nadd to use these functions
  543. * i386 set comparison functions now return their results in al instead
  544. of in the flags so that they can be sued as compilerprocs
  545. - removed all processor specific code from n386add.pas that has to do
  546. with set handling, it's now all done in nadd.pas
  547. * fixed fpc_set_contains_sets in genset.inc
  548. * fpc_set_in_byte is now coded inline in n386set.pas and doesn't use a
  549. helper anymore
  550. * some small fixes in compproc.inc/set.inc regarding the declaration of
  551. internal helper types (fpc_small_set and fpc_normal_set)
  552. Revision 1.6 2001/09/03 13:27:43 jonas
  553. * compilerproc implementation of set addition/substraction/...
  554. * changed the declaration of some set helpers somewhat to accomodate the
  555. above change
  556. * i386 still uses the old code for comparisons of sets, because its
  557. helpers return the results in the flags
  558. * dummy tc_normal_2_small_set type conversion because I need the original
  559. resulttype of the set add nodes
  560. NOTE: you have to start a cycle with 1.0.5!
  561. Revision 1.5 2001/08/01 15:00:10 jonas
  562. + "compproc" helpers
  563. * renamed several helpers so that their name is the same as their
  564. "public alias", which should facilitate the conversion of processor
  565. specific code in the code generator to processor independent code
  566. * some small fixes to the val_ansistring and val_widestring helpers
  567. (always immediately exit if the source string is longer than 255
  568. chars)
  569. * fixed fpc_dynarray_high and fpc_dynarray_length if the dynarray is
  570. still nil (used to crash, now return resp -1 and 0)
  571. Revision 1.4 2001/05/09 19:57:07 peter
  572. *** empty log message ***
  573. Revision 1.3 2000/09/21 16:09:19 jonas
  574. + new, much faster do_set_range based on the PowerPC version (which
  575. will be committed tomorrow)
  576. Revision 1.2 2000/07/13 11:33:41 michael
  577. + removed logs
  578. }