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.
page revision: 0, last edited: 20 Sep 2015 21:20