mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-26 02:00:32 +01:00
Land the research campaign's two Tier A closures (+1,184 meaningful)
Both come from LAW M8, measured by the corpus-scale x87 study: for the displacement-0 term of an inlined helper on &x->field arguments, VC7 loads first the operand with the smaller IL-local ordinal (mod 8), so one real local too many or too few flips it. The same study proved source operand order is INERT for a bare product (p->a*p->b compiles identically to p->b*p->a), so the R3 operand swap was never just inadmissible - it never worked. These fixes change the local set, not the operand order. - player_effects _player_effect_start (735, park reopened and removed): the three field stores relative.i/j/k = dot_product3d(...) become one set_real_vector3d(&relative, dot, dot, dot) call (laws_w2 A4 helper routing). The park's criterion - natural same-compiler evidence for the final commutative operand order - is satisfied by M8. - actor_moving _actor_get_stopping_distances (449): the `long vehicle_driver_type` local and its range test become a switch over the two driver enum constants (M8, plus A9 switch width). Semantics are unchanged: _hovering_ground (2) and _nondirectional_ground (3) are adjacent in actors.h, so the range and the two cases select exactly the same values, and the same TU already switches on actor->input.vehicle_driver_type at line 3190. M8 is the new law that lifts this row's do-not-repeat tag. Verified independently of the study: each whole-TU gate changes exactly one row (residual -> EXACT) with every other exact row intact, the _point_from_line3d guard passes, player_effects' other two parks are unchanged, and fake_match_scan reports 0 leads. Full ninja, parks 272 active / 0 stale / 0 invalid, stable diff vs scratch/opus5-next150-before.json: gained 10 / 8,528 padded, regressions 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6e26c8ed93
commit
417fc10e48
3 files changed
+10
-26
No files matched your search
@@ -3022,25 +3022,6 @@
|
||||
"objdiff_percent": 96.454544
|
||||
}
|
||||
},
|
||||
{
|
||||
"unit": "source/effects/player_effects",
|
||||
"function": "_player_effect_start",
|
||||
"class": "instruction-scheduling",
|
||||
"evidence": "Fuzzy-parked under the current house rule after reconstructing the complete typed public damage-feedback entry point from January's ABI, assert, random-seed lock lifetime, definition fields, calls, branch topology, and indicator math, with the preserved Opus donor at 608c66380 and independent HCEA code at 570c83fd corroborating the behavior and semantic name. Target and candidate both occupy 736 padded bytes, contain 247 instructions, and carry the same 35 ordered relocation identities; objdiff reports 99.99187 percent similarity. The only instruction-byte difference is the interchangeable load side of one commutative multiplication in the inlined camera-left dot product. The source retains typed player, unit, object, tag, observer, sound, rumble, and math access; uses the authenticated bit-8 damage-indicator enum name; and keeps owner prototypes in player_effects.h and random_math.h. A shared owner-header enum insertion was rejected because a full rebuild reopened the protected units.obj node-orientation sentinel; the named constant is therefore TU-private. No raw offset, false type or prototype, representation pun, volatile/register forcing, barrier, pragma, assembly, fake dependency, forced inline, undefined behavior, or nonsensical branch is retained. Reopen only for authoritative January source/local records or natural same-compiler evidence for the final commutative operand order.",
|
||||
"measurements": {
|
||||
"target": {
|
||||
"size": 736,
|
||||
"relocation_count": 35,
|
||||
"normalized_sha256": "33e471ae9bb2e73c5aaabb039c2c574847ed5f611ef728aefd5af9394e526b08"
|
||||
},
|
||||
"base": {
|
||||
"size": 736,
|
||||
"relocation_count": 35,
|
||||
"normalized_sha256": "997d1f3474a758ef05783af0fb2927e46cf5e3e1505e340540f171b47ad13b21"
|
||||
},
|
||||
"objdiff_percent": 99.99187
|
||||
}
|
||||
},
|
||||
{
|
||||
"unit": "source/objects/damage",
|
||||
"function": "_area_of_effect_cause_damage_to_object",
|
||||
|
||||
@@ -1130,10 +1130,10 @@ void actor_get_stopping_distances(
|
||||
|
||||
if (actor->input.vehicle_index != NONE)
|
||||
{
|
||||
long vehicle_driver_type = actor->input.vehicle_driver_type;
|
||||
|
||||
if (vehicle_driver_type >= _actor_vehicle_driver_hovering_ground &&
|
||||
vehicle_driver_type <= _actor_vehicle_driver_nondirectional_ground)
|
||||
switch (actor->input.vehicle_driver_type)
|
||||
{
|
||||
case _actor_vehicle_driver_hovering_ground:
|
||||
case _actor_vehicle_driver_nondirectional_ground:
|
||||
{
|
||||
struct unit_datum *vehicle = vehicle_get(actor->input.vehicle_index);
|
||||
struct vehicle_definition *definition =
|
||||
@@ -1145,6 +1145,8 @@ void actor_get_stopping_distances(
|
||||
reference_speed = definition->maximum_forward_speed;
|
||||
deceleration = definition->speed_acceleration;
|
||||
stopping_deceleration = deceleration;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (actor->meta.unit_index != NONE)
|
||||
|
||||
@@ -1235,9 +1235,10 @@ void player_effect_start(
|
||||
&delta);
|
||||
cross_product3d(&camera->forward, &camera->up, &left);
|
||||
|
||||
relative.i = dot_product3d(&left, &delta);
|
||||
relative.j = dot_product3d(&delta, &camera->forward);
|
||||
relative.k = dot_product3d(&delta, &camera->up);
|
||||
set_real_vector3d(&relative,
|
||||
dot_product3d(&left, &delta),
|
||||
dot_product3d(&delta, &camera->forward),
|
||||
dot_product3d(&delta, &camera->up));
|
||||
|
||||
if (normalize3d(&relative) != 0.0f)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user