This isn't used and if it were, it wouldn't compile. It calls
`ufn`, which doesn't get compiled in either (unless `C_ONLY`
is defined, which it isn't, and if it were, that wouldn't
compile either due to a missing `StkLim0`).
A subsequent PR will remove `ufn` and related code.
* ForkUnixShell() can be a static procedure
* Restructure SAFEREAD() to be a little clearer
* Convert unixjob type field defines to an enum and fix related unhandled switch cases.
* Use local declaration of loop variables in for-loop, removing register attributes
* Restructure SAFEREAD() to be a little clearer
* Send and receive 2 additional bytes for pid.
* Prefer standard C99 "inline" over "__inline__" for SAFEREAD
* Address older versions of C compiler which don't have __BYTE_ORDER__
* Checking for __GNUC__ is not sufficient to determine if builtins are available.
* Add makefile fragment for 32-bit PowerPC on Mac OSX build, and ignore the build directories.
* Add comment describing use of __BIG/LITTLE_ENDIAN__ definition
Reformat and make use of PTRMASK & swapx() as appropriate.
It's likely that nnewframe() could be reworked to avoid needing
to unconditionally swapx() the result and, like native_newframe()
return the appropriate value as the result.
Rather than having to specify or omit -DBYTESWAP in the Makefile
fragment for each system we can detect whether the system requires
byte swapping based on the __BYTE_ORDER__ C preprocessor definition.
Update CMakeLists.txt to account for this as well.
This was a machine running SunOS 4, which we no longer support.
It had an odd display controller and a compiler with issues that
required workarounds. Those compiler issues aren't an issue in
today's world, so we don't need to keep the workarounds present
for reference.
It had a bit of inline assembly, but that is still present in
other files for other platforms.
The LowerRightX and LowerRightY were calculated as the X and Y coordinates of the
pixel to the right and below the last visible pixel, but are compared with the
last actually visible pixel in the source. They need an extra -1 offset to correct.
Add comments to explain what's going on. Fix the signature of the function to reflect
that the "dummy" passed for the display region is a pointer not an integer.
We no longer need to run a separate peephole optimization pass over the
compiler generated or hand-coded assembler for SunOS3 and SunOS4 on 68K or SPARC
We remove the preprocessor symbols and code controlled by them
SUN4_OS4_IL
SUN3_OS3_IL
SUN3_OS4_IL
and SUN3_OS3_OR_OS4_IL
This removes a bit of the debug info printing, but other than
that, is pretty close to what it was before.
We also now build it in both the make and cmake build systems.
* Correct signedness of 2nd parameter of lispcmp().
* Be clear that comparison of characters in bytecmp is unsigned since GETBYTE returns unsigned char.
* Make bytecmp() and lispcmp() helper functions static and removed from mkatomdefs.h.
* If no BYTESWAP we need to include <string.h> for memcmp()
* Use (uint8_t) rather than (unsigned char) in bytecmp when comparing to GETBYTE()
Convert ERROR_EXIT, TIMER_EXIT, and WARN to "do {} while (0)" style and
fix a few usage points that were missing trailing semi-colons.
Remove unused typedef for CFuncPtr.
This no longer had anything to do with profiling and was
only doing some defines for the switch case block addresses,
which we no longer need since there's no longer optional
asm generated for them.
This feature was controlled by the compilation flag `OPDISP`
which would enable some bits of assembler on the x86 (ISC or DOS)
or some other specialized code on SPARC. On SPARC hardware, there
was a special compilation process that would preprocess the code
and generate dispatch tables.
We do this now when this feature is enabled using gcc's computed
gotos feature. This is available in clang and some other compilers.
Notably, it isn't present in Visual Studio.
This doesn't decrease our portability at all as this feature is
optional and it replaces specialized assembler code with C using
compiler extensions (making it cross-platform).
In doing this, we've removed a bunch of related code, however,
it is likely that other pieces yet remain and will be removed
in subsequent commits as we clean things up and refine them.
This feature remains disabled by default for now.
* Use gcc / clang overflow builtins.
This avoids expensive checks for overflow that employ undefined
behavior.
This is a step along the way towards replacing the old hand-written
assembler that did the same thing in terms of using the CPU's
overflow detection.
* Remove unimplemented SPARC asm for multiplication, divide, and remainder.
This wasn't implemented before, and for multiplication, it is now
implemented for gcc and friends using overflow detection.
* Remove USE_INLINE_ARITH.
Now that we have the compiler built-ins for detecting overflow,
we don't need custom assembly for it for each platform.
For now, we keep, but still don't use, the code that do a hot
path through the dispatch loop for some math. This code isn't
actually running or in use, but it is separate from how the
other inline arithmetic was being performed. These are the
`fast_op_*` functions that are implemented in assembler.
UNALIGNED_FETCH_OK shouldn't be set for an entire OS, but
based on the CPU architecture.
Some ARM systems don't allow unaligned reads. x86 and x86_64
do, so update how we configure this.
This wasn't actually hooked up any more, so it was pretty much
all dead code. The handling of this in the command line options
is gone.
In `bin/makefile-tail`, `DEVFILES` and `LIBFILES` became identical, so
`DEVFILES` went away.
* Delete code related to NATIVETRAN feature.
This was obsolete work that had been done for generating
native code from the bytecode.
ClosesInterlisp/medley#89.
* Remove unused SaveD6.
Previously, we were building as C89 and the new code required
the C99 flag on Solaris with Sun Studio. Now that we build as
C99, this should work now and we can remove the special case
code.
The predefined cursors (image and mask) are better represented
as arrays of const uint8_t rather than char. Likewise for the
window icon. Track this change in the functions that take the
image and mask as arguments, casting only when we get to the
X library functions that take char*.
Like the renaming of NOFORN, this gets rid of some double
negatives. It also removes some patterns where we had:
```
#ifdef NOETHER
#else
...
#endif
```
and replaces them with:
```
#ifdef MAIKO_ENABLE_ETHERNET
...
#endif
```
This lets us get rid of double-negatives, which are confusing,
and starts a naming scheme that is easier to see when something
is a Maiko flag versus something else.
This also adds a bit to the `-info` output to say which OS and CPU
are being targeted.
This can be used in subsequent commits to drive whether or not
we need `BYTESWAP` and whether or not unaligned memory access
is okay.
We'll be able to remove per-platform defines from all of the
makefiles and cmake.
The NOFORN flag controls foreign function interface code, which
was written using the dld_* APIs which haven't existed in years.
There was a GNU dld that provided this API, but it was withdrawn
in 2006.
If this code is to be re-enabled, it will have to be changed to
use the `dlopen` family of APIs.
When compiling for SunOS4, we would have a macro-ized version
of this function which required a slightly different call-site.
This removes all of that as it isn't used or needed.
* Support building on OpenBSD, x86-64
* Clean up OpenBSD Makefile
* Add OpenBSD to cmake build
* Use clang as CC for OpenBSD
Co-authored-by: Alex Segura <alex@lispm.dev>