Patched up everything so that it compiles without errors again. This only addresses code related to some compile error. A large portion of the angle code still uses angle_t and converts back and forth.
- Now that state jumps are handled by returning a state, we still need a
way for them to jump to a NULL state. If the parameter processed by this
macro turns out to be NULL, Actor's 'Null' state will be substituted
instead, since that's something that can be jumped to.
- The A_Jump family of action functions now return the state to jump
to (NULL if no jump is to be taken) instead of jumping directly.
It is the caller's responsibility to handle the jump. This will
make it possible to use their results in if statements and
do something other than jump.
- DECORATE return statements can now return the result of a function
(but not any random expression--it must be a function call). To
make a jump happen from inside a multi-action block, you must
return the value of an A_Jump function. e.g.:
{ return A_Jump(128, "SomeState"); }
- The VMFunction class now contains its prototype instead of storing
it at a higher level in PFunction. This is so that
FState::CallAction can easily tell if a function returns a state.
- Removed the FxTailable class because with explicit return
statements, it's not useful anymore.
Converting a floating point value that is out of range for a signed integer will result in 0x80000000 with SSE math, which is used exclusively for this purpose on modern Visual C++ compilers, so this cannot be used anywhere.
On ARM there's problems with float to unsigned int conversions.
xs_Float does not depend on these
- I kept getting confused trying to read these instructions, so now their
disassembly looks more MIPS-like:
* All mnemonics have had 'b' prepended to them for "branch".
* The CMP_CHECK bit alters the displayed mnemonic for the inverted
versions. e.g. BEQ can be displayed as BNE.
* The following JMP instruction that encodes the branch destination has
been folded into the disassembly of the branch instruction. Unlike
MIPS, I chose to display it offset from the branch check with =>
instead of another comma.
- Fixed: Don't assume operator new will return a pointer with 16-byte
alignment when allocating a block for the VMFrameStack. Because it seems
it's actually guaranteed to be 8-byte aligned. Don't know where I got
the idea it would always be 16-byte aligned.
- Added versions of the trig operations supported by FLOP that can work
with degrees directly instead of radians.
- Reorder FLOPs into more sensible groupings.
running with the checked VM can be quite slow, since it has asserts everywhere. Some other
fixes were needed before the code actually worked:
- A_CallSpecial needs to have its arguments cast to ints.
- Some functions that set pnum/paramnum directly did not decrement it by 1. This also applies
to A_Jump, though it just uses the value of paramnum instead of changing it.
- Renamed pnum in the PARAM macros to paramnum, since pnum is already used in a few other
places for something different, so this makes searching for it easier.
This has not been tested especially thoroughly, but a first glance seems to indicate success.
SVN r2163 (scripting)
Currently, they're only good for disassembly and pasting into a proper text editor
for viewing.
- Fixed some problems with the FxExpression emitters that were revealed by actually
using them on the standard actors.
SVN r1911 (scripting)
it isn't even used anywhere yet. In retrospect, I probably should have targeted an intermediate
representation and done codegen with that instead, since that would be something I can reuse.
SVN r1908 (scripting)
- Derive PClass from dobject.cpp. This has one major ramification: Since the PClass
is not allocated until runtime, you cannot initialize any static/global data
structures with pointers to PClasses using RUNTIME_CLASS. Attempting to do so
will just initialize with a NULL pointer. Instead, you can initialize using
the address of the pointer returned by RUNTIME_CLASS and dereference that. By
the time you have an opportunity to dereference it, it will no longer be NULL.
- Sync CmakeLists.txt.
- Random fixes for problems GCC spotted.
SVN r1852 (scripting)