00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "config.h"
00022 #include "system.h"
00023 #include "coretypes.h"
00024 #include "tm.h"
00025 #include "rtl.h"
00026 #include "flags.h"
00027 #include "hard-reg-set.h"
00028 #include "obstack.h"
00029 #include "basic-block.h"
00030
00031
00032
00033
00034
00035 sbitmap
00036 sbitmap_alloc (unsigned int n_elms)
00037 {
00038 unsigned int bytes, size, amt;
00039 sbitmap bmap;
00040
00041 size = SBITMAP_SET_SIZE (n_elms);
00042 bytes = size * sizeof (SBITMAP_ELT_TYPE);
00043 amt = (sizeof (struct simple_bitmap_def)
00044 + bytes - sizeof (SBITMAP_ELT_TYPE));
00045 bmap = xmalloc (amt);
00046 bmap->n_bits = n_elms;
00047 bmap->size = size;
00048 bmap->bytes = bytes;
00049 return bmap;
00050 }
00051
00052
00053
00054
00055
00056 sbitmap
00057 sbitmap_resize (sbitmap bmap, unsigned int n_elms, int def)
00058 {
00059 unsigned int bytes, size, amt;
00060 unsigned int last_bit;
00061
00062 size = SBITMAP_SET_SIZE (n_elms);
00063 bytes = size * sizeof (SBITMAP_ELT_TYPE);
00064 if (bytes > bmap->bytes)
00065 {
00066 amt = (sizeof (struct simple_bitmap_def)
00067 + bytes - sizeof (SBITMAP_ELT_TYPE));
00068 bmap = xrealloc (bmap, amt);
00069 }
00070
00071 if (n_elms > bmap->n_bits)
00072 {
00073 if (def)
00074 {
00075 memset (bmap->elms + bmap->size, -1, bytes - bmap->bytes);
00076
00077
00078 last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
00079 if (last_bit)
00080 bmap->elms[bmap->size - 1]
00081 |= ~((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
00082
00083
00084 last_bit = n_elms % SBITMAP_ELT_BITS;
00085 if (last_bit)
00086 bmap->elms[size - 1]
00087 &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
00088 }
00089 else
00090 memset (bmap->elms + bmap->size, 0, bytes - bmap->bytes);
00091 }
00092 else if (n_elms < bmap->n_bits)
00093 {
00094
00095 last_bit = n_elms % SBITMAP_ELT_BITS;
00096 if (last_bit)
00097 bmap->elms[size - 1]
00098 &= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
00099 }
00100
00101 bmap->n_bits = n_elms;
00102 bmap->size = size;
00103 bmap->bytes = bytes;
00104 return bmap;
00105 }
00106
00107
00108
00109 sbitmap
00110 sbitmap_realloc (sbitmap src, unsigned int n_elms)
00111 {
00112 unsigned int bytes, size, amt;
00113 sbitmap bmap;
00114
00115 size = SBITMAP_SET_SIZE (n_elms);
00116 bytes = size * sizeof (SBITMAP_ELT_TYPE);
00117 amt = (sizeof (struct simple_bitmap_def)
00118 + bytes - sizeof (SBITMAP_ELT_TYPE));
00119
00120 if (src->bytes >= bytes)
00121 {
00122 src->n_bits = n_elms;
00123 return src;
00124 }
00125
00126 bmap = (sbitmap) xrealloc (src, amt);
00127 bmap->n_bits = n_elms;
00128 bmap->size = size;
00129 bmap->bytes = bytes;
00130 return bmap;
00131 }
00132
00133
00134
00135 sbitmap *
00136 sbitmap_vector_alloc (unsigned int n_vecs, unsigned int n_elms)
00137 {
00138 unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
00139 sbitmap *bitmap_vector;
00140
00141 size = SBITMAP_SET_SIZE (n_elms);
00142 bytes = size * sizeof (SBITMAP_ELT_TYPE);
00143 elm_bytes = (sizeof (struct simple_bitmap_def)
00144 + bytes - sizeof (SBITMAP_ELT_TYPE));
00145 vector_bytes = n_vecs * sizeof (sbitmap *);
00146
00147
00148
00149
00150
00151
00152 {
00153
00154 struct { char x; SBITMAP_ELT_TYPE y; } align;
00155 int alignment = (char *) & align.y - & align.x;
00156 vector_bytes = (vector_bytes + alignment - 1) & ~ (alignment - 1);
00157 }
00158
00159 amt = vector_bytes + (n_vecs * elm_bytes);
00160 bitmap_vector = xmalloc (amt);
00161
00162 for (i = 0, offset = vector_bytes; i < n_vecs; i++, offset += elm_bytes)
00163 {
00164 sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
00165
00166 bitmap_vector[i] = b;
00167 b->n_bits = n_elms;
00168 b->size = size;
00169 b->bytes = bytes;
00170 }
00171
00172 return bitmap_vector;
00173 }
00174
00175
00176
00177 void
00178 sbitmap_copy (sbitmap dst, sbitmap src)
00179 {
00180 memcpy (dst->elms, src->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size);
00181 }
00182
00183
00184 int
00185 sbitmap_equal (sbitmap a, sbitmap b)
00186 {
00187 return !memcmp (a->elms, b->elms, sizeof (SBITMAP_ELT_TYPE) * a->size);
00188 }
00189
00190
00191
00192 void
00193 sbitmap_zero (sbitmap bmap)
00194 {
00195 memset (bmap->elms, 0, bmap->bytes);
00196 }
00197
00198
00199
00200 void
00201 sbitmap_ones (sbitmap bmap)
00202 {
00203 unsigned int last_bit;
00204
00205 memset (bmap->elms, -1, bmap->bytes);
00206
00207 last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
00208 if (last_bit)
00209 bmap->elms[bmap->size - 1]
00210 = (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
00211 }
00212
00213
00214
00215 void
00216 sbitmap_vector_zero (sbitmap *bmap, unsigned int n_vecs)
00217 {
00218 unsigned int i;
00219
00220 for (i = 0; i < n_vecs; i++)
00221 sbitmap_zero (bmap[i]);
00222 }
00223
00224
00225
00226 void
00227 sbitmap_vector_ones (sbitmap *bmap, unsigned int n_vecs)
00228 {
00229 unsigned int i;
00230
00231 for (i = 0; i < n_vecs; i++)
00232 sbitmap_ones (bmap[i]);
00233 }
00234
00235
00236
00237
00238
00239 bool
00240 sbitmap_union_of_diff_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00241 {
00242 unsigned int i, n = dst->size;
00243 sbitmap_ptr dstp = dst->elms;
00244 sbitmap_ptr ap = a->elms;
00245 sbitmap_ptr bp = b->elms;
00246 sbitmap_ptr cp = c->elms;
00247 SBITMAP_ELT_TYPE changed = 0;
00248
00249 for (i = 0; i < n; i++)
00250 {
00251 SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & ~*cp++);
00252 changed |= *dstp ^ tmp;
00253 *dstp++ = tmp;
00254 }
00255
00256 return changed != 0;
00257 }
00258
00259 void
00260 sbitmap_union_of_diff (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00261 {
00262 unsigned int i, n = dst->size;
00263 sbitmap_ptr dstp = dst->elms;
00264 sbitmap_ptr ap = a->elms;
00265 sbitmap_ptr bp = b->elms;
00266 sbitmap_ptr cp = c->elms;
00267
00268 for (i = 0; i < n; i++)
00269 *dstp++ = *ap++ | (*bp++ & ~*cp++);
00270 }
00271
00272
00273
00274 void
00275 sbitmap_not (sbitmap dst, sbitmap src)
00276 {
00277 unsigned int i, n = dst->size;
00278 sbitmap_ptr dstp = dst->elms;
00279 sbitmap_ptr srcp = src->elms;
00280 unsigned int last_bit;
00281
00282 for (i = 0; i < n; i++)
00283 *dstp++ = ~*srcp++;
00284
00285
00286 last_bit = src->n_bits % SBITMAP_ELT_BITS;
00287 if (last_bit)
00288 dst->elms[n-1] = dst->elms[n-1]
00289 & ((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
00290 }
00291
00292
00293
00294
00295 void
00296 sbitmap_difference (sbitmap dst, sbitmap a, sbitmap b)
00297 {
00298 unsigned int i, dst_size = dst->size;
00299 unsigned int min_size = dst->size;
00300 sbitmap_ptr dstp = dst->elms;
00301 sbitmap_ptr ap = a->elms;
00302 sbitmap_ptr bp = b->elms;
00303
00304
00305 gcc_assert (a->size >= dst_size);
00306
00307
00308 if (b->size < min_size)
00309 min_size = b->size;
00310 for (i = 0; i < min_size; i++)
00311 *dstp++ = *ap++ & (~*bp++);
00312
00313
00314 if (dst != a && i != dst_size)
00315 for (; i < dst_size; i++)
00316 *dstp++ = *ap++;
00317 }
00318
00319
00320
00321
00322 bool
00323 sbitmap_any_common_bits (sbitmap a, sbitmap b)
00324 {
00325 sbitmap_ptr ap = a->elms;
00326 sbitmap_ptr bp = b->elms;
00327 unsigned int i, n;
00328
00329 n = MIN (a->size, b->size);
00330 for (i = 0; i < n; i++)
00331 if ((*ap++ & *bp++) != 0)
00332 return true;
00333
00334 return false;
00335 }
00336
00337
00338
00339
00340 bool
00341 sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
00342 {
00343 unsigned int i, n = dst->size;
00344 sbitmap_ptr dstp = dst->elms;
00345 sbitmap_ptr ap = a->elms;
00346 sbitmap_ptr bp = b->elms;
00347 SBITMAP_ELT_TYPE changed = 0;
00348
00349 for (i = 0; i < n; i++)
00350 {
00351 SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
00352 changed |= *dstp ^ tmp;
00353 *dstp++ = tmp;
00354 }
00355
00356 return changed != 0;
00357 }
00358
00359 void
00360 sbitmap_a_and_b (sbitmap dst, sbitmap a, sbitmap b)
00361 {
00362 unsigned int i, n = dst->size;
00363 sbitmap_ptr dstp = dst->elms;
00364 sbitmap_ptr ap = a->elms;
00365 sbitmap_ptr bp = b->elms;
00366
00367 for (i = 0; i < n; i++)
00368 *dstp++ = *ap++ & *bp++;
00369 }
00370
00371
00372
00373
00374 bool
00375 sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
00376 {
00377 unsigned int i, n = dst->size;
00378 sbitmap_ptr dstp = dst->elms;
00379 sbitmap_ptr ap = a->elms;
00380 sbitmap_ptr bp = b->elms;
00381 SBITMAP_ELT_TYPE changed = 0;
00382
00383 for (i = 0; i < n; i++)
00384 {
00385 SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
00386 changed |= *dstp ^ tmp;
00387 *dstp++ = tmp;
00388 }
00389
00390 return changed != 0;
00391 }
00392
00393 void
00394 sbitmap_a_xor_b (sbitmap dst, sbitmap a, sbitmap b)
00395 {
00396 unsigned int i, n = dst->size;
00397 sbitmap_ptr dstp = dst->elms;
00398 sbitmap_ptr ap = a->elms;
00399 sbitmap_ptr bp = b->elms;
00400
00401 for (i = 0; i < n; i++)
00402 *dstp++ = *ap++ ^ *bp++;
00403 }
00404
00405
00406
00407
00408 bool
00409 sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
00410 {
00411 unsigned int i, n = dst->size;
00412 sbitmap_ptr dstp = dst->elms;
00413 sbitmap_ptr ap = a->elms;
00414 sbitmap_ptr bp = b->elms;
00415 SBITMAP_ELT_TYPE changed = 0;
00416
00417 for (i = 0; i < n; i++)
00418 {
00419 SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
00420 changed |= *dstp ^ tmp;
00421 *dstp++ = tmp;
00422 }
00423
00424 return changed != 0;
00425 }
00426
00427 void
00428 sbitmap_a_or_b (sbitmap dst, sbitmap a, sbitmap b)
00429 {
00430 unsigned int i, n = dst->size;
00431 sbitmap_ptr dstp = dst->elms;
00432 sbitmap_ptr ap = a->elms;
00433 sbitmap_ptr bp = b->elms;
00434
00435 for (i = 0; i < n; i++)
00436 *dstp++ = *ap++ | *bp++;
00437 }
00438
00439
00440
00441 bool
00442 sbitmap_a_subset_b_p (sbitmap a, sbitmap b)
00443 {
00444 unsigned int i, n = a->size;
00445 sbitmap_ptr ap, bp;
00446
00447 for (ap = a->elms, bp = b->elms, i = 0; i < n; i++, ap++, bp++)
00448 if ((*ap | *bp) != *bp)
00449 return false;
00450
00451 return true;
00452 }
00453
00454
00455
00456
00457 bool
00458 sbitmap_a_or_b_and_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00459 {
00460 unsigned int i, n = dst->size;
00461 sbitmap_ptr dstp = dst->elms;
00462 sbitmap_ptr ap = a->elms;
00463 sbitmap_ptr bp = b->elms;
00464 sbitmap_ptr cp = c->elms;
00465 SBITMAP_ELT_TYPE changed = 0;
00466
00467 for (i = 0; i < n; i++)
00468 {
00469 SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & *cp++);
00470 changed |= *dstp ^ tmp;
00471 *dstp++ = tmp;
00472 }
00473
00474 return changed != 0;
00475 }
00476
00477 void
00478 sbitmap_a_or_b_and_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00479 {
00480 unsigned int i, n = dst->size;
00481 sbitmap_ptr dstp = dst->elms;
00482 sbitmap_ptr ap = a->elms;
00483 sbitmap_ptr bp = b->elms;
00484 sbitmap_ptr cp = c->elms;
00485
00486 for (i = 0; i < n; i++)
00487 *dstp++ = *ap++ | (*bp++ & *cp++);
00488 }
00489
00490
00491
00492
00493 bool
00494 sbitmap_a_and_b_or_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00495 {
00496 unsigned int i, n = dst->size;
00497 sbitmap_ptr dstp = dst->elms;
00498 sbitmap_ptr ap = a->elms;
00499 sbitmap_ptr bp = b->elms;
00500 sbitmap_ptr cp = c->elms;
00501 SBITMAP_ELT_TYPE changed = 0;
00502
00503 for (i = 0; i < n; i++)
00504 {
00505 SBITMAP_ELT_TYPE tmp = *ap++ & (*bp++ | *cp++);
00506 changed |= *dstp ^ tmp;
00507 *dstp++ = tmp;
00508 }
00509
00510 return changed != 0;
00511 }
00512
00513 void
00514 sbitmap_a_and_b_or_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
00515 {
00516 unsigned int i, n = dst->size;
00517 sbitmap_ptr dstp = dst->elms;
00518 sbitmap_ptr ap = a->elms;
00519 sbitmap_ptr bp = b->elms;
00520 sbitmap_ptr cp = c->elms;
00521
00522 for (i = 0; i < n; i++)
00523 *dstp++ = *ap++ & (*bp++ | *cp++);
00524 }
00525
00526 #ifdef IN_GCC
00527
00528
00529
00530 void
00531 sbitmap_intersection_of_succs (sbitmap dst, sbitmap *src, int bb)
00532 {
00533 basic_block b = BASIC_BLOCK (bb);
00534 unsigned int set_size = dst->size;
00535 edge e;
00536 unsigned ix;
00537
00538 for (e = NULL, ix = 0; ix < EDGE_COUNT (b->succs); ix++)
00539 {
00540 e = EDGE_SUCC (b, ix);
00541 if (e->dest == EXIT_BLOCK_PTR)
00542 continue;
00543
00544 sbitmap_copy (dst, src[e->dest->index]);
00545 break;
00546 }
00547
00548 if (e == 0)
00549 sbitmap_ones (dst);
00550 else
00551 for (++ix; ix < EDGE_COUNT (b->succs); ix++)
00552 {
00553 unsigned int i;
00554 sbitmap_ptr p, r;
00555
00556 e = EDGE_SUCC (b, ix);
00557 if (e->dest == EXIT_BLOCK_PTR)
00558 continue;
00559
00560 p = src[e->dest->index]->elms;
00561 r = dst->elms;
00562 for (i = 0; i < set_size; i++)
00563 *r++ &= *p++;
00564 }
00565 }
00566
00567
00568
00569
00570 void
00571 sbitmap_intersection_of_preds (sbitmap dst, sbitmap *src, int bb)
00572 {
00573 basic_block b = BASIC_BLOCK (bb);
00574 unsigned int set_size = dst->size;
00575 edge e;
00576 unsigned ix;
00577
00578 for (e = NULL, ix = 0; ix < EDGE_COUNT (b->preds); ix++)
00579 {
00580 e = EDGE_PRED (b, ix);
00581 if (e->src == ENTRY_BLOCK_PTR)
00582 continue;
00583
00584 sbitmap_copy (dst, src[e->src->index]);
00585 break;
00586 }
00587
00588 if (e == 0)
00589 sbitmap_ones (dst);
00590 else
00591 for (++ix; ix < EDGE_COUNT (b->preds); ix++)
00592 {
00593 unsigned int i;
00594 sbitmap_ptr p, r;
00595
00596 e = EDGE_PRED (b, ix);
00597 if (e->src == ENTRY_BLOCK_PTR)
00598 continue;
00599
00600 p = src[e->src->index]->elms;
00601 r = dst->elms;
00602 for (i = 0; i < set_size; i++)
00603 *r++ &= *p++;
00604 }
00605 }
00606
00607
00608
00609
00610 void
00611 sbitmap_union_of_succs (sbitmap dst, sbitmap *src, int bb)
00612 {
00613 basic_block b = BASIC_BLOCK (bb);
00614 unsigned int set_size = dst->size;
00615 edge e;
00616 unsigned ix;
00617
00618 for (ix = 0; ix < EDGE_COUNT (b->succs); ix++)
00619 {
00620 e = EDGE_SUCC (b, ix);
00621 if (e->dest == EXIT_BLOCK_PTR)
00622 continue;
00623
00624 sbitmap_copy (dst, src[e->dest->index]);
00625 break;
00626 }
00627
00628 if (ix == EDGE_COUNT (b->succs))
00629 sbitmap_zero (dst);
00630 else
00631 for (ix++; ix < EDGE_COUNT (b->succs); ix++)
00632 {
00633 unsigned int i;
00634 sbitmap_ptr p, r;
00635
00636 e = EDGE_SUCC (b, ix);
00637 if (e->dest == EXIT_BLOCK_PTR)
00638 continue;
00639
00640 p = src[e->dest->index]->elms;
00641 r = dst->elms;
00642 for (i = 0; i < set_size; i++)
00643 *r++ |= *p++;
00644 }
00645 }
00646
00647
00648
00649
00650 void
00651 sbitmap_union_of_preds (sbitmap dst, sbitmap *src, int bb)
00652 {
00653 basic_block b = BASIC_BLOCK (bb);
00654 unsigned int set_size = dst->size;
00655 edge e;
00656 unsigned ix;
00657
00658 for (ix = 0; ix < EDGE_COUNT (b->preds); ix++)
00659 {
00660 e = EDGE_PRED (b, ix);
00661 if (e->src== ENTRY_BLOCK_PTR)
00662 continue;
00663
00664 sbitmap_copy (dst, src[e->src->index]);
00665 break;
00666 }
00667
00668 if (ix == EDGE_COUNT (b->preds))
00669 sbitmap_zero (dst);
00670 else
00671 for (ix++; ix < EDGE_COUNT (b->preds); ix++)
00672 {
00673 unsigned int i;
00674 sbitmap_ptr p, r;
00675
00676 e = EDGE_PRED (b, ix);
00677 if (e->src == ENTRY_BLOCK_PTR)
00678 continue;
00679
00680 p = src[e->src->index]->elms;
00681 r = dst->elms;
00682 for (i = 0; i < set_size; i++)
00683 *r++ |= *p++;
00684 }
00685 }
00686 #endif
00687
00688
00689
00690 int
00691 sbitmap_first_set_bit (sbitmap bmap)
00692 {
00693 unsigned int n;
00694
00695 EXECUTE_IF_SET_IN_SBITMAP (bmap, 0, n, { return n; });
00696 return -1;
00697 }
00698
00699
00700
00701 int
00702 sbitmap_last_set_bit (sbitmap bmap)
00703 {
00704 int i;
00705 SBITMAP_ELT_TYPE *ptr = bmap->elms;
00706
00707 for (i = bmap->size - 1; i >= 0; i--)
00708 {
00709 SBITMAP_ELT_TYPE word = ptr[i];
00710
00711 if (word != 0)
00712 {
00713 unsigned int index = (i + 1) * SBITMAP_ELT_BITS - 1;
00714 SBITMAP_ELT_TYPE mask
00715 = (SBITMAP_ELT_TYPE) 1 << (SBITMAP_ELT_BITS - 1);
00716
00717 while (1)
00718 {
00719 if ((word & mask) != 0)
00720 return index;
00721
00722 mask >>= 1;
00723 index--;
00724 }
00725 }
00726 }
00727
00728 return -1;
00729 }
00730
00731 void
00732 dump_sbitmap (FILE *file, sbitmap bmap)
00733 {
00734 unsigned int i, n, j;
00735 unsigned int set_size = bmap->size;
00736 unsigned int total_bits = bmap->n_bits;
00737
00738 fprintf (file, " ");
00739 for (i = n = 0; i < set_size && n < total_bits; i++)
00740 for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
00741 {
00742 if (n != 0 && n % 10 == 0)
00743 fprintf (file, " ");
00744
00745 fprintf (file, "%d",
00746 (bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0);
00747 }
00748
00749 fprintf (file, "\n");
00750 }
00751
00752 void
00753 dump_sbitmap_file (FILE *file, sbitmap bmap)
00754 {
00755 unsigned int i, pos;
00756
00757 fprintf (file, "n_bits = %d, set = {", bmap->n_bits);
00758
00759 for (pos = 30, i = 0; i < bmap->n_bits; i++)
00760 if (TEST_BIT (bmap, i))
00761 {
00762 if (pos > 70)
00763 {
00764 fprintf (file, "\n ");
00765 pos = 0;
00766 }
00767
00768 fprintf (file, "%d ", i);
00769 pos += 2 + (i >= 10) + (i >= 100) + (i >= 1000);
00770 }
00771
00772 fprintf (file, "}\n");
00773 }
00774
00775 void
00776 debug_sbitmap (sbitmap bmap)
00777 {
00778 dump_sbitmap_file (stderr, bmap);
00779 }
00780
00781 void
00782 dump_sbitmap_vector (FILE *file, const char *title, const char *subtitle,
00783 sbitmap *bmaps, int n_maps)
00784 {
00785 int bb;
00786
00787 fprintf (file, "%s\n", title);
00788 for (bb = 0; bb < n_maps; bb++)
00789 {
00790 fprintf (file, "%s %d\n", subtitle, bb);
00791 dump_sbitmap (file, bmaps[bb]);
00792 }
00793
00794 fprintf (file, "\n");
00795 }