machine_bits
Definition: | integer i = machine_bits() |
Description: | machine_bits() is a function built-in to the interpreter. It indicates the architecture that the program is being executed on: 32 or 64. |
pwa/p2js: | Supported. The trivial routine in p2js.js simply always returns 32. |
Notes: | Use machine_bits() when you want to execute different code depending
on which architecture the program is running on. Most applications do
not need to use machine_bits(), except perhaps to optimise a critical
inner loop, however the Phix interpreter, for example, has to know
whether to generate 32 or 64 bit machine instructions.
The machine_word() function is very similar, yielding 4 or 8 for a 32 or 64 bit executable respectively. The call to machine_bits() costs nothing. It is optimized at compile-time into the appropriate integer value: 32 or 64. Further, no code whatsoever will be emitted for the comparison, else, and one of the two branches in the following. You may also use requires(32|64) to trigger a restart prompt or crash should the runtime requirements not be met. |
Example 1: |
if machine_bits()=32 then poke4(addr,{#55667788,#11223344}) else poke8(addr,#1122334455667788) end if |
Example 2: |
pokeN(addr,pszMsg,machine_word()) -- (poke a 4 or 8 byte pointer) poken(addr,pszMsg) -- "" |
Example 3: |
This routine is Phix specific. For compatibility with Euphoria the following can be used (copied from builtins\cffi.e):
--/* function machine_bits() ifdef BITS64 then return 64 elsedef return 32 end ifdef end function --*/ |
Implementation: | Optimised away by the compiler - search for T_machine_bits and T_machine_word in pmain.e for more details. |
See Also: | platform, format directive, poke, requires |