<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
So, here are two maybe interesting cases.<br>At least to jog my brain and help make sense of the system.<br><br><br>DIV vs. Word.Divide of CARDINAL.<br>u is for unsigned, or word<br>C is for Cardinal.<br> Cardinal is [0..LAST(INTEGER)].<br><br><br><*NOWARN*>PROCEDURE uDivide_param_C_C(a:CARDINAL;b:CARDINAL):Word.T=BEGIN RETURN Word.Divide(a,b);END uDivide_param_C_C;<br><br><*NOWARN*>PROCEDURE Divide_param_C_C(a:CARDINAL;b:CARDINAL):CARDINAL=BEGIN RETURN a DIV b;END Divide_param_C_C;<br><br><br>(5579) begin_procedure procedure:0x178:Divide__Divide_param_C_C Divide__Divide_param_C_C<br>(5580) load var:0x2E5:a offset:0 src_t:word_64 dst_t:int_64<br>(5581) load var:0x2E6:b offset:0 src_t:word_64 dst_t:int_64<br>(5582) div type:int_64<br>(5583) check_lo type:int_64 0 code:1<br>(5584) exit_proc type:word_64<br>(5585) end_procedure procedure:0x178:Divide__Divide_param_C_C<br><br><br>(5571) begin_procedure procedure:0x177:Divide__uDivide_param_C_C Divide__uDivide_param_C_C<br>(5572) load var:0x2E2:a offset:0 src_t:word_64 dst_t:int_64<br>(5573) load var:0x2E3:b offset:0 src_t:word_64 dst_t:int_64<br>(5574) div type:word_64<br>(5575) exit_proc type:int_64<br>(5576) end_procedure procedure:0x177:Divide__uDivide_param_C_C<br><br><br>Thoughts?<br><br><br>Is it right for the load to convert from word to int?<br> (I'll see about removing the address_token for unsigned/signed-only conversions, if it is there.)<br> <br> <br>I can see how makes sense.<br>CARDINAL is just a subrange of INTEGER. So it is INTEGER.<br><br><br>If/when we are clever, we can represent the subranges in the types<br>in the backend, and the optimizer should notice, and these<br>would generate identical code, if they don't already.<br><br><br>But the return types of the divides vary as well.<br>There do exist unsigned types at this level.<br><br><br>Does that imply that<br>a,b:CARDINAL<br><br>Word.Or(a, 0) DIV Word.Or(b, 0)<br>is different than<br>a DIV b?<br><br><br>I guess so. Different code at least.<br>Given that cardinal is "half range", the results should always match.<br>That is, really, other than added/missing range checks, CARDINAL<br>will always act the same as INTEGER.<br>So then the unsigned types..don't mean anything?<br><br><br> - Jay<br><br><br><br><br>                                           </body>
</html>