Hello Sven.
Thank you for the help.
I tried this code:
procedure test;
var c: integer;
loc,hic: byte;
begin
c := 1000;
hic := hi(c);
loc := lo(c);
end;
The result is always hic = 0 and loc = 0 for me.
I have looked in ninl.pas as you suggested, and found the in_lo_xxxxxx
items around line 2780 in that file. I note that in_lo_integer and
in_hi_integer do not appear among the items listed.
In fpc/rtl/inc/system.inc, I find Hi(b:byte): byte declared.
in fpc/rtl/inc/systemh.inc, I find only declarations for hi and lo.
I'm guessing that somehow hi(i:integer): byte and lo(i:integer): byte
got dropped from the code base somehow (but remained in the fpc
documentation).
Perhaps it's located somewhere that I have not looked yet?
Anyway -- thanks to all who gave me some pointers! I don't have the
skill to try to suggest a fix, if in fact one is required. The
work-around for me is to simply use word rather than integer types.
Regards,
Curt Carpenter
On 11/14/2012 4:50 AM, Sven Barth wrote:
Am 14.11.2012 05:19, schrieb Curt Carpenter:
Hello.
I am using Lazarus 0.9.30.4 with FPC 2.6.0 under Windows XP.
In my system, the two functions "hi(x)" and "lo(x)" don't seem to
work if the argument x is an integer variable (although both
functions work fine if x is a WORD variable).
Why do you come to the conclusion that they work incorrectly? Do you
have an example where you can state what you expect and what you get?
To see if I could figure out why this is, I started trying to find
the System unit that contains these two functions. I haven't been
able to locate it though.
The hi and lo functions are compiler intrinsics and are not visible in
code (the compiler generates specific code for them). If you still
want to explore: they are implemented in compiler/ninl.pas (look for
"in_XX_YYY" where "XX" is either "hi" or "lo" and "YYY" is "word",
"long" or "qword").
Could anyone tell me where I'll find the system unit source? I have
the source for FPC, but can's seem to find system.pas anywhere.
The system units are called "system.pp" (not .pas) and are located for
each target in rtl/TARGET/system.pp (these usually include files from
rtl/inc or rtl/TARGET or rtl/PLATFORM) (example for TARGET is win32 or
linux, example for PLATFORM is i386 or arm)
Regards,
Sven
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus