From 251578047f2d09b2365dc0486f66320426d836f1 Mon Sep 17 00:00:00 2001 From: Jeff Genovy <29107334+jefgen@users.noreply.github.com> Date: Wed, 13 Mar 2019 13:10:14 -0700 Subject: [PATCH] Make 73 numeric constants const, moving them into .rdata (#234) This change makes the 73 variables in ratconst.h actually inline const, which allows them to move from the mutable .data section of the executable, and into the read-only .rdata section instead. Moving data to the .rdata section has a number of benefits, such as preventing possible corruption due to stray writes, or other memory corruption. Additionally, the initialization at run-time start-up is no longer needed, so there is also a reduction in the .text (code) section as well. As a result the overall size of the Calculator.exe binary (on x64 Release builds) decreases by 1,536 bytes (or ~1.5 KB) with no change in behavior other than a small performance benefit. --- src/CalcManager/Ratpack/conv.cpp | 2 +- src/CalcManager/Ratpack/ratconst.h | 226 ++++++++++++++-------------- src/CalcManager/Ratpack/ratpak.h | 2 +- src/CalcManager/Ratpack/support.cpp | 6 +- 4 files changed, 119 insertions(+), 117 deletions(-) diff --git a/src/CalcManager/Ratpack/conv.cpp b/src/CalcManager/Ratpack/conv.cpp index f0e5190..4e75224 100644 --- a/src/CalcManager/Ratpack/conv.cpp +++ b/src/CalcManager/Ratpack/conv.cpp @@ -61,7 +61,7 @@ void* zmalloc(size_t a) // //----------------------------------------------------------------------------- -void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src) +void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src) { memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE)))); } diff --git a/src/CalcManager/Ratpack/ratconst.h b/src/CalcManager/Ratpack/ratconst.h index d208b33..be24b00 100644 --- a/src/CalcManager/Ratpack/ratconst.h +++ b/src/CalcManager/Ratpack/ratconst.h @@ -1,480 +1,482 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -// Autogenerated by _dumprawrat in support.c -NUMBER init_num_one= { +#pragma once + +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_num_one= { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_num_two= { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_num_two= { 1, 1, 0, { 2,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_num_five= { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_num_five= { 1, 1, 0, { 5,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_num_six= { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_num_six= { 1, 1, 0, { 6,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_num_ten= { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_num_ten= { 1, 1, 0, { 10,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_smallest = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_smallest = { 1, 1, 0, { 1,} }; -NUMBER init_q_rat_smallest = { +inline const NUMBER init_q_rat_smallest = { 1, 4, 0, { 0, 190439170, 901055854, 10097,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_negsmallest = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_negsmallest = { -1, 1, 0, { 1,} }; -NUMBER init_q_rat_negsmallest = { +inline const NUMBER init_q_rat_negsmallest = { 1, 4, 0, { 0, 190439170, 901055854, 10097,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_pt_eight_five = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_pt_eight_five = { 1, 1, 0, { 85,} }; -NUMBER init_q_pt_eight_five = { +inline const NUMBER init_q_pt_eight_five = { 1, 1, 0, { 100,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_six = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_six = { 1, 1, 0, { 6,} }; -NUMBER init_q_rat_six = { +inline const NUMBER init_q_rat_six = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_two = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_two = { 1, 1, 0, { 2,} }; -NUMBER init_q_rat_two = { +inline const NUMBER init_q_rat_two = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_zero = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_zero = { 1, 1, 0, { 0,} }; -NUMBER init_q_rat_zero = { +inline const NUMBER init_q_rat_zero = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_one = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_one = { 1, 1, 0, { 1,} }; -NUMBER init_q_rat_one = { +inline const NUMBER init_q_rat_one = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_neg_one = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_neg_one = { -1, 1, 0, { 1,} }; -NUMBER init_q_rat_neg_one = { +inline const NUMBER init_q_rat_neg_one = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_half = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_half = { 1, 1, 0, { 1,} }; -NUMBER init_q_rat_half = { +inline const NUMBER init_q_rat_half = { 1, 1, 0, { 2,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_ten = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_ten = { 1, 1, 0, { 10,} }; -NUMBER init_q_rat_ten = { +inline const NUMBER init_q_rat_ten = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_pi = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_pi = { 1, 6, 0, { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} }; -NUMBER init_q_pi = { +inline const NUMBER init_q_pi = { 1, 6, 0, { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_two_pi = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_two_pi = { 1, 6, 0, { 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,} }; -NUMBER init_q_two_pi = { +inline const NUMBER init_q_two_pi = { 1, 6, 0, { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_pi_over_two = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_pi_over_two = { 1, 6, 0, { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} }; -NUMBER init_q_pi_over_two = { +inline const NUMBER init_q_pi_over_two = { 1, 6, 0, { 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_one_pt_five_pi = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_one_pt_five_pi = { 1, 6, 0, { 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,} }; -NUMBER init_q_one_pt_five_pi = { +inline const NUMBER init_q_one_pt_five_pi = { 1, 6, 0, { 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_e_to_one_half = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_e_to_one_half = { 1, 6, 0, { 256945612, 216219427, 223516738, 477442596, 581063757, 23,} }; -NUMBER init_q_e_to_one_half = { +inline const NUMBER init_q_e_to_one_half = { 1, 6, 0, { 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_exp = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_exp = { 1, 6, 0, { 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,} }; -NUMBER init_q_rat_exp = { +inline const NUMBER init_q_rat_exp = { 1, 6, 0, { 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_ln_ten = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_ln_ten = { 1, 6, 0, { 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,} }; -NUMBER init_q_ln_ten = { +inline const NUMBER init_q_ln_ten = { 1, 6, 0, { 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_ln_two = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_ln_two = { 1, 6, 0, { 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,} }; -NUMBER init_q_ln_two = { +inline const NUMBER init_q_ln_two = { 1, 6, 0, { 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rad_to_deg = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rad_to_deg = { 1, 6, 0, { 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,} }; -NUMBER init_q_rad_to_deg = { +inline const NUMBER init_q_rad_to_deg = { 1, 6, 0, { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rad_to_grad = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rad_to_grad = { 1, 6, 0, { 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,} }; -NUMBER init_q_rad_to_grad = { +inline const NUMBER init_q_rad_to_grad = { 1, 6, 0, { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_qword = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_qword = { 1, 3, 0, { 2147483647, 2147483647, 3,} }; -NUMBER init_q_rat_qword = { +inline const NUMBER init_q_rat_qword = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_dword = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_dword = { 1, 2, 0, { 2147483647, 1,} }; -NUMBER init_q_rat_dword = { +inline const NUMBER init_q_rat_dword = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_max_long = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_max_long = { 1, 1, 0, { 2147483647,} }; -NUMBER init_q_rat_max_long = { +inline const NUMBER init_q_rat_max_long = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_min_long = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_min_long = { -1, 2, 0, { 0, 1,} }; -NUMBER init_q_rat_min_long = { +inline const NUMBER init_q_rat_min_long = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_word = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_word = { 1, 1, 0, { 65535,} }; -NUMBER init_q_rat_word = { +inline const NUMBER init_q_rat_word = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_byte = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_byte = { 1, 1, 0, { 255,} }; -NUMBER init_q_rat_byte = { +inline const NUMBER init_q_rat_byte = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_400 = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_400 = { 1, 1, 0, { 400,} }; -NUMBER init_q_rat_400 = { +inline const NUMBER init_q_rat_400 = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_360 = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_360 = { 1, 1, 0, { 360,} }; -NUMBER init_q_rat_360 = { +inline const NUMBER init_q_rat_360 = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_200 = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_200 = { 1, 1, 0, { 200,} }; -NUMBER init_q_rat_200 = { +inline const NUMBER init_q_rat_200 = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_180 = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_180 = { 1, 1, 0, { 180,} }; -NUMBER init_q_rat_180 = { +inline const NUMBER init_q_rat_180 = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_max_exp = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_max_exp = { 1, 1, 0, { 100000,} }; -NUMBER init_q_rat_max_exp = { +inline const NUMBER init_q_rat_max_exp = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_min_exp = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_min_exp = { -1, 1, 0, { 100000,} }; -NUMBER init_q_rat_min_exp = { +inline const NUMBER init_q_rat_min_exp = { 1, 1, 0, { 1,} }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_max_fact = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_max_fact = { 1, 1, 0, { 3249, } }; -NUMBER init_q_rat_max_fact = { +inline const NUMBER init_q_rat_max_fact = { 1, 1, 0, { 1, } }; -// Autogenerated by _dumprawrat in support.c -NUMBER init_p_rat_min_fact = { +// Autogenerated by _dumprawrat in support.cpp +inline const NUMBER init_p_rat_min_fact = { -1, 1, 0, { 1000, } }; -NUMBER init_q_rat_min_fact = { +inline const NUMBER init_q_rat_min_fact = { 1, 1, 0, diff --git a/src/CalcManager/Ratpack/ratpak.h b/src/CalcManager/Ratpack/ratpak.h index 693380b..3ae0673 100644 --- a/src/CalcManager/Ratpack/ratpak.h +++ b/src/CalcManager/Ratpack/ratpak.h @@ -411,7 +411,7 @@ extern void tanrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); // angle type extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); -extern void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src); +extern void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src); extern void _destroynum( _In_ PNUMBER pnum ); extern void _destroyrat( _In_ PRAT prat ); diff --git a/src/CalcManager/Ratpack/support.cpp b/src/CalcManager/Ratpack/support.cpp index d747b4d..a0deace 100644 --- a/src/CalcManager/Ratpack/support.cpp +++ b/src/CalcManager/Ratpack/support.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. //---------------------------------------------------------------------------- @@ -31,8 +31,8 @@ static int cbitsofprecision = 0; #define READRAWNUM(v) #define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout) #define DUMPRAWNUM(v) fprintf( stderr, \ -"// Autogenerated by _dumprawrat in support.c\n" ); \ - fprintf( stderr, "NUMBER init_" #v "= {\n" ); \ +"// Autogenerated by _dumprawrat in support.cpp\n" ); \ + fprintf( stderr, "inline const NUMBER init_" #v "= {\n" ); \ _dumprawnum(v, wcout); \ fprintf( stderr, "};\n" )