CAC 2015-09-20

pl1 compilation error

          if asl < 0e0
          then do;

002460  aa  6 00040 3735 20   epp7      pr6|32,*
002461  aa  7 00174 4311 00   fld       pr7|124             asl
002462  aa   775445 5150 04   fcmp      -1243,ic            000127 = 710777777777
002463  aa   000026 6050 04   tpl       22,ic               002511

Watch for '710777777777' being written by the pl1 compiler…

bingo 00257:052640 100000455100
bingo 00314:004373 003140060540
bingo 00314:004373 003140060540
bingo 00314:004373 003140060540
bingo 00314:004645 003140060540
bingo 00314:435605 000140100540
bingo 00314:362455 600150755100

10000045510 -- fst (floating store)
   257 >system_library_1>bound_library_wired_
   314 >system_library_standard>bound_pl1_

pbm >system_library_1>bound_library_wired_
any_to_any_                      45352  10754      2      0   3202    202

052640-045352=05266
                                  4674  "^LGENERIC to Float Binary Target Conversion
                                  4675
                                  4676  "     Rounding is done to the desired precision.
                                  4677
    005264                        4678  put_flt_bin_1:
    005264  aa   000033 2220 03   4679            ldx2      27,du                         " round precision
    005265  0a   005333 7010 00   4680            tsx1      load_rounded_flt_bin
    005266  aa  1 00000 4551 00   4681            fst       target|0                      " store away
    005267  aa  1 00001 3515 00   4682            epp       target,target|1               " update target pointer
    005270  aa  7 00000 7101 00   4683            tra       pr7|0                         " return

    005333                        4742  load_rounded_flt_bin:
    005333  aa  5 00012 2351 00   4743            lda       work|flt_bin_generic_exp
    005334  aa   000034 7350 00   4744            als       36-8                          " make short exponent
    005335  0a   006233 6030 00   4745            trc       flt_range_error               " won't fit
    005336  aa  5 00012 7551 00   4746            sta       work|flt_bin_generic_exp
    005337  aa  5 00006 2371 00   4747            ldaq      work|flt_bin_generic          " get mantissa
    005340  aa  5 00012 4111 00   4748            lde       work|flt_bin_generic_exp      " get exponent
    005341  aa   000000 5730 00   4749            fno                                     " find 0.0
    005342  aa   000000 6000 11   4750            tze       0,x1                          " cannot round
    005343  aa   000000 1050 03   4751            cmpx5     0,du
    005344  aa   000000 6000 11   4752            tze       0,x1                          " no round
                                  4753
    005345  aa  5 00012 7421 00   4754            stx2      work|flt_bin_generic_exp      " two word mask entries
    005346  aa   000000 6230 12   4755            eax3      0,x2
    005347  aa  5 00012 0631 00   4756            adx3      work|flt_bin_generic_exp
    005350  aa   000000 1150 03   4757            cmpa      0,du
    005351  0a   005356 6040 00   4758            tmi       load_rounded_flt_bin.negative
    005352  0a   010410 0770 13   4759            adaq      mask_table+2,x3               " round
                                  4760
                                  4761  "     Normalize to recover any possible overflow situation.
                                  4762
    005353  aa   000000 5730 00   4763            fno
    005354  aa   004000 6340 07   4764            ldi       mask_faults,dl                " clear possible overflow
    005355  aa   000000 7100 11   4765            tra       0,x1

fno E 000 A 000000000177 Q 777777777777
fno no ovf
fno not 0
fno done E 344 A 377777777777 Q 776000000000

Lets see if we can track this down in the PL1 segment…

bingo 00314:004373 003140060540

pbm >system_library_standard>bound_pl1_
declare_constant                  4056   1176      0      2   3252    370

04373-04056=315

                                                            STATEMENT 1 ON LINE 142
          substr(copy,1,value_size) = substr(value,1,bit_size);

000313  aa  5 00002 3515 20   epp1      pr5|2,*
000314  aa  6 00122 2351 00   lda       pr6|82              bit_size
000315  aa  003 140 060 540   csl       (pr,rl),(pr,rl),fill(0),bool(move)
000316  aa  1 00000 00 0005   descb     pr1|0,al            value
000317  aa  6 00124 00 0006   descb     pr6|84,ql           copy

/* search the chain of constants to find one who's value is equal to this value.
   If no such constant can be found, make a new constant declaration. */

search:
          word_size = divide(bit_size+bits_per_word-1,bits_per_word,31,0);
          value_size = word_size * bits_per_word;

          substr(copy,1,value_size) = substr(value,1,bit_size);

Ugh. Too late.

Resample, reads and writes….

bingo w 00257:052640 100000455100
bingo r 00313:004373 003140060540
bingo w 00313:004373 003140060540
bingo w 00313:004373 003140060540
bingo w 00313:004373 003140060540
bingo r 00313:004645 003140060540
bingo w 00313:004645 003140060540
bingo r 00313:435542 300000235100
bingo r 00313:435546 300000235100
bingo r 00313:435605 000140100540
bingo r 00313:435605 000140100540
bingo r 00313:435605 000140100540
bingo w 00313:435605 000140100540
bingo r 00313:362454 000000235100
bingo w 00313:362455 600150755100
bingo r 00313:362504 000000235100
bingo r 00313:362520 000000235100
bingo r 00313:362532 000000236100
bingo r 00313:362534 000000336100
bingo r 00313:354362 600404440100
bingo r 00313:040102 000100160500
bingo r 00313:040102 000100160500
bingo r 00313:004373 003140060540
04373-04056=315

Gah.. same location.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License