Skip to content

Fix msvc 12.0 builds #6052

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions ports/windows/.appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
image: Visual Studio 2013
clone_depth: 1
skip_tags: true

environment:
# Python version used
MICROPY_CPYTHON3: c:/python34/python.exe
Expand Down Expand Up @@ -71,10 +75,3 @@ after_test:
if ($LASTEXITCODE -ne 0) {
throw "$env:MSYSTEM mpy-cross tests exited with code $LASTEXITCODE"
}

skip_tags: true

deploy: off

nuget:
disable_publish_on_pr: true
8 changes: 8 additions & 0 deletions ports/windows/mpconfigport.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,14 @@ extern const struct _mp_obj_module_t mp_module_time;
#define MP_SSIZE_MAX _I32_MAX
#endif

// VC++ 12.0 fixes
#if (_MSC_VER <= 1800)
#define MICROPY_PY_MATH_ATAN2_FIX_INFNAN (1)
#define MICROPY_PY_MATH_FMOD_FIX_INFNAN (1)
#ifdef _WIN64
#define MICROPY_PY_MATH_MODF_FIX_NEGZERO (1)
#endif
#endif

// CL specific definitions

Expand Down
27 changes: 26 additions & 1 deletion py/modmath.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
// M_PI is not part of the math.h standard and may not be defined
// And by defining our own we can ensure it uses the correct const format.
#define MP_PI MICROPY_FLOAT_CONST(3.14159265358979323846)
#define MP_PI_4 MICROPY_FLOAT_CONST(0.78539816339744830962)
#define MP_3_PI_4 MICROPY_FLOAT_CONST(2.35619449019234492885)

STATIC NORETURN void math_error(void) {
mp_raise_ValueError(MP_ERROR_TEXT("math domain error"));
Expand Down Expand Up @@ -132,7 +134,17 @@ MATH_FUN_1(asin, asin)
// atan(x)
MATH_FUN_1(atan, atan)
// atan2(y, x)
#if MICROPY_PY_MATH_ATAN2_FIX_INFNAN
mp_float_t atan2_func(mp_float_t x, mp_float_t y) {
if (isinf(x) && isinf(y)) {
return copysign(y < 0 ? MP_3_PI_4 : MP_PI_4, x);
}
return atan2(x, y);
}
MATH_FUN_2(atan2, atan2_func)
#else
MATH_FUN_2(atan2, atan2)
#endif
// ceil(x)
MATH_FUN_1_TO_INT(ceil, ceil)
// copysign(x, y)
Expand All @@ -148,7 +160,14 @@ MATH_FUN_1(fabs, fabs_func)
// floor(x)
MATH_FUN_1_TO_INT(floor, floor) // TODO: delegate to x.__floor__() if x is not a float
// fmod(x, y)
#if MICROPY_PY_MATH_FMOD_FIX_INFNAN
mp_float_t fmod_func(mp_float_t x, mp_float_t y) {
return (!isinf(x) && isinf(y)) ? x : fmod(x, y);
}
MATH_FUN_2(fmod, fmod_func)
#else
MATH_FUN_2(fmod, fmod)
#endif
// isfinite(x)
MATH_FUN_1_TO_BOOL(isfinite, isfinite)
// isinf(x)
Expand Down Expand Up @@ -246,7 +265,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_frexp_obj, mp_math_frexp);
// modf(x)
STATIC mp_obj_t mp_math_modf(mp_obj_t x_obj) {
mp_float_t int_part = 0.0;
mp_float_t fractional_part = MICROPY_FLOAT_C_FUN(modf)(mp_obj_get_float(x_obj), &int_part);
mp_float_t x = mp_obj_get_float(x_obj);
mp_float_t fractional_part = MICROPY_FLOAT_C_FUN(modf)(x, &int_part);
#if MICROPY_PY_MATH_MODF_FIX_NEGZERO
if (fractional_part == MICROPY_FLOAT_CONST(0.0)) {
fractional_part = copysign(fractional_part, x);
}
#endif
mp_obj_t tuple[2];
tuple[0] = mp_obj_new_float(fractional_part);
tuple[1] = mp_obj_new_float(int_part);
Expand Down
15 changes: 15 additions & 0 deletions py/mpconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -1128,6 +1128,21 @@ typedef double mp_float_t;
#define MICROPY_PY_MATH_ISCLOSE (0)
#endif

// Whether to provide fix for atan2 Inf handling.
#ifndef MICROPY_PY_MATH_ATAN2_FIX_INFNAN
#define MICROPY_PY_MATH_ATAN2_FIX_INFNAN (0)
#endif

// Whether to provide fix for fmod Inf handling.
#ifndef MICROPY_PY_MATH_FMOD_FIX_INFNAN
#define MICROPY_PY_MATH_FMOD_FIX_INFNAN (0)
#endif

// Whether to provide fix for modf negative zero handling.
#ifndef MICROPY_PY_MATH_MODF_FIX_NEGZERO
#define MICROPY_PY_MATH_MODF_FIX_NEGZERO (0)
#endif

// Whether to provide "cmath" module
#ifndef MICROPY_PY_CMATH
#define MICROPY_PY_CMATH (0)
Expand Down
4 changes: 4 additions & 0 deletions py/ringbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
#include <stddef.h>
#include <stdint.h>

#ifdef _MSC_VER
#include "py/mpconfig.h" // For inline.
#endif

typedef struct _ringbuf_t {
uint8_t *buf;
uint16_t size;
Expand Down
4 changes: 2 additions & 2 deletions tests/float/math_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
# double argument functions
for name, f, args in (
("pow", math.pow, ((0, 2), (-1, 2), (0, -1), (-1, 2.3))),
("fmod", math.fmod, ((1.2, inf), (1.2, 0), (inf, 1.2))),
("atan2", math.atan2, ((0, 0),)),
("fmod", math.fmod, ((1.2, inf), (1.2, -inf), (1.2, 0), (inf, 1.2))),
("atan2", math.atan2, ((0, 0), (-inf, inf), (-inf, -inf), (inf, -inf))),
("copysign", math.copysign, ()),
):
for x in args + ((0, inf), (inf, 0), (inf, inf), (inf, nan), (nan, inf), (nan, nan)):
Expand Down
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy