Rework x86-32 stack layout
[sljit.git] / API_CHANGES
blob34e2702c1612496583249de80767587c241007fd
1 This file is the short summary of the API changes:
3 16.06.2022 - Non-backward compatible
4     Remove SLJIT_ENTER_CDECL and SLJIT_CALL_CDECL.
5     The default calling mode is cdecl now.
7 21.04.2022 - Non-backward compatible
8     Floating point comparison types are renamed.
10 01.03.2022 - Non-backward compatible
11     Remove SLJIT_NEG. Instead substraction from
12     immedate 0 is preferred.
14 31.01.2022 - Non-backward compatible
15     The SLJIT_CURRENT_FLAGS_ADD_SUB option is
16     split into SLJIT_CURRENT_FLAGS_ADD and
17     SLJIT_CURRENT_FLAGS_SUB.
19 27.02.2022 - Non-backward compatible
20     The SLJIT_F64_ALIGNMENT option is removed.
22 17.02.2022 - Non-backward compatible
23     Many floating point operations may destroy flags.
25 06.02.2022 - Non-backward compatible
26     The SLJIT_FUNC_OFFSET macro is renamed to SLJIT_FUNC_ADDR.
27     Furthermore a new SLJIT_FUNC_UADDR macro is added which
28     returns with an unsigned address.
30 01.02.2022 - Non-backward compatible
31     Rework function argument list descriptor macros used by
32     sljit_emit_enter, sljit_set_context, sljit_emit_call,
33     and sljit_emit_icall functions.
35 25.01.2022 - Non-backward compatible
36     Change SLJIT_I32_OP and SLJIT_F32_OP to SLJIT_32.
38 24.01.2022 - Non-backward compatible
39     The SLJIT_UNUSED value is replaced by sljit_emit_op2u and
40     sljit_emit_return_void functions.
42 27.05.2021 - Non-backward compatible
43     The comparison types with the 32 suffix are removed from the
44     project. The sljit_set_current_flags has a new flag which
45     must be set when the flags are set by a 32 bit operation.
47 04.05.2021 - Non-backward compatible
48     The mul overflow comparison type is removed from the project
49     and the normal overflow type should be used instead.
51 28.04.2021 - Non-backward compatible
52     The current_flags argument of sljit_set_current_flags must
53     provide information about the instructions which set the CPU
54     status flags.
56 16.08.2020 - Non-backward compatible
57     A second parameter has been added to sljit_create_compiler()
58     and sljit_free_code() to pass some data to the executable
59     allocator functions.
61 24.01.2020 - Non-backward compatible
62     The SLJIT_MOV instructions does not support SLJIT_UNDEFINED
63     as destination. New prefetch instructions has been added
64     instead.
66 20.01.2019 - Non-backward compatible
67     The check_sljit_emit_fast_return function is removed, and
68     this operation is available through check_sljit_emit_op_src.
70 16.01.2019 - Backward compatible
71     A new opcode (SLJIT_ENDBR) is added to support
72     Intel Control-flow Enforcement Technology (CET).
74 08.01.2018 - Non-backward compatible
75     Fields of sljit_stack are renamed to fit a
76     top-down stack better.
78 02.01.2018 - Non-backward compatible
79     Immediate source argument has not been supported
80     for NOT, NEG, CLZ, and fast_return instructions
81     anymore. No CPU supports immedate arguments for
82     these opcodes.
84 26.12.2017 - Non-backward compatible
85     The MOVU opcodes are removed because the emulation
86     is inefficient. The sljit_emit_mem() operation is
87     added instead.
89 18.10.2017 - Non-backward compatible
90     The SLJIT_CALL0 - SLJIT_CALL3 jump types are
91     replaced by sljit_emit_call and sljit_emit_icall
92     function calls. These functions allows declaring
93     the argument types.
95 06.05.2017 - Non-backward compatible
96     Src argument is removed from sljit_emit_op_flags.
98 24.04.2017 - Non-backward compatible
99     The sljit_is_fpu_available function is replaced
100     by sljit_has_cpu_feature.
102 20.04.2017 - Non-backward compatible
103     x86 specific cmov is changed to a general function
105 27.03.2017 - Non-backward compatible
106     JIT stack is changed from bottom-up to top-town.
108 15.01.2017 - Non-backward compatible
109     Move with update may modifiy flags, the base register
110     can only be used once and [reg+reg<<shift] addressing
111     mode where shift > 0 is not supported anymore.
113 12.01.2017 - Non-backward compatible
114     Introducing a new flag mechanism which provides better
115     compatibility with CPUs without flags. Only two flags
116     remain: zero and variable. The current type of the
117     variable flag is specified by the arithmetic operator.
118     The SLJIT_KEEP_FLAGS is removed.
120 29.02.2016 - Non-backward compatible
121     Several types and instructions are renamed to improve
122     readability. In general byte, half, and int are renamed
123     to 8, 16, and 32. Floating point types are also renamed
124     from d and s to f64 and f32.
126       [s|u]b -> [s|u]8    (8 bit values)
127       [s|u]h -> [s|u]16   (16 bit values)
128       [s|u]i -> [s|u]32   (32 bit values)
129       d -> f64            (64 bit floating point value)
130       s -> f32            (32 bit floating point value)
132 18.05.2015 - Non-backward compatible
133     SLJIT_[I|]L[U|S]DIV is renamed to SLJIT_[I|][U|S]DIVMOD
135 29.09.2014 - Non-backward compatible
136     The sljit_create_compiler, sljit_allocate_stack, and
137     sljit_free_stack functions have an allocator_data
138     argument now.
140 19.09.2014 - Non-backward compatible
141     Using I, D, S prefixes in conditional and floating
142     point operations. And an L prefix to long multiplication
143     and division (op0 opcodes).
145 11.08.2014 - Non-backward compatible
146     A currently unused options parameter is added to sljit_emit_enter
147     and sljit_set_context.
149 06.07.2014 - Non-backward compatible
150     SCRATCH registers are renamed to Rx and SAVED registers
151     are renamed to Sx. See the explanation of these registers
152     in sljitLir.h.
154 31.05.2014 - Non-backward compatible
155     SLJIT_TEMPORARY_EREGx registers were not renamed to
156     SLJIT_SCRATCH_EREGx when the change was done on 08.11.2012
158 05.03.2014 - Backward compatible
159     The sljit_set_target now supports those jumps, which
160     does not created with SLJIT_REWRITABLE_JUMP flag.
161     Reason: sljit_emit_ijump does not support conditional
162     jumps.
164 03.03.2014 - Non-backward compatible
165     SLJIT_MOV_UI cannot be combined with SLJIT_INT_OP.
166     Reason: SLJIT_INT_OP flag is not recommended to use
167     directly, and SLJIT_IMOV has no sign bit.
169 29.01.2014 - Backward compatible
170     Bits assigned to SLJIT_MEM and SLJIT_IMM flags are changed.
171     Reason: the most common cases are fits into one byte now,
172     and more registers can be supported in the future.
174 08.11.2012 - Non-backward compatible
175     SLJIT_TEMPORARY_REGx registers are renamed to SLJIT_SCRATCH_REGx.
177 07.11.2012 - Non-backward compatible
178     sljit_emit_cond_value is renamed to sljit_emit_op_flags. An
179     extra source argument is added which will be used in the future.
181 05.11.2012 - Backward compatible
182     sljit_emit_cond_value now supports SLJIT_AND and SLJIT_INT_OP
183     flags, which makes this function complete.
185 01.11.2012 - Non-backward compatible
186     SLJIT_F* opcodes are renamed to SLJIT_*D to show that
187     they are double precision operators. Furthermore
188     SLJIT_*S single precision opcodes are added.
190 01.11.2012 - Non-backward compatible
191     Register arguments of operations with SLJIT_INT_OP flag
192     must be computed by another operation with SLJIT_INT_OP flag.
193     The same way as SLJIT_SINGLE_OP flag works with floating point
194     numbers. See the description of SLJIT_INT_OP.
196 01.11.2012 - Backward compatible
197     All operations whose support the SLJIT_INT_OP flag, have an
198     alternate name now, which includes the SLJIT_INT_OP. These
199     names starting with I.
201 31.10.2012 - Non-backward compatible
202     Renaming sljit_w to sljit_sw, sljit_i to sljit_si, sljit_h
203     to sljit_sh, and sljit_b to sljit_sb. Reason: their sign
204     bit is part of the type now.
206 20.10.2012 - Non-backward compatible
207     Renaming SLJIT_C_FLOAT_NAN to SLJIT_C_FLOAT_UNORDERED.
208     Reason: all architectures call these unordered comparions.