Browse Source

* 16-bit ALU fixes in tshlshrnode.pass_typecheck

git-svn-id: branches/i8086@23817 -
nickysn 12 years ago
parent
commit
edc382aa76
1 changed files with 24 additions and 8 deletions
  1. 24 8
      compiler/nmat.pas

+ 24 - 8
compiler/nmat.pas

@@ -604,18 +604,34 @@ implementation
            begin
              { keep singness of orignal type }
              if is_signed(left.resultdef) then
-{$ifdef cpunodefaultint}
-               inserttypeconv(left,nd)
-{$else cpunodefaultint}
-               inserttypeconv(left,s32inttype)
-{$endif cpunodefaultint}
+               begin
+{$if defined(cpunodefaultint)}
+                 inserttypeconv(left,nd)
+{$elseif defined(cpu64bitalu) or defined(cpu32bitalu)}
+                 inserttypeconv(left,s32inttype)
+{$elseif defined(cpu16bitalu)}
+                 if left.resultdef.size > 2 then
+                   inserttypeconv(left,s32inttype)
+                 else
+                   inserttypeconv(left,sinttype);
+{$else}
+                 internalerror(2013031301);
+{$endif}
+               end
              else
                begin
-{$ifdef cpunodefaultint}
+{$if defined(cpunodefaultint)}
                  inserttypeconv(left,nd)
-{$else cpunodefaultint}
+{$elseif defined(cpu64bitalu) or defined(cpu32bitalu)}
                  inserttypeconv(left,u32inttype);
-{$endif cpunodefaultint}
+{$elseif defined(cpu16bitalu)}
+                 if left.resultdef.size > 2 then
+                   inserttypeconv(left,u32inttype)
+                 else
+                   inserttypeconv(left,uinttype);
+{$else}
+                 internalerror(2013031301);
+{$endif}
                end
            end;