| // Copyright 2026 The IREE Authors |
| // |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| // Miscellaneous <stdlib.h> functions for wasm32. |
| // |
| // Memory allocation (malloc/free) is in dlmalloc.c. |
| // String-to-number conversion (strtol/strtod) is in strtol.c. |
| // Program termination (abort/exit) is in abort.c. |
| |
| #include <stdint.h> |
| #include <stdlib.h> |
| |
| //===----------------------------------------------------------------------===// |
| // Integer arithmetic |
| //===----------------------------------------------------------------------===// |
| |
| int abs(int value) { return value < 0 ? -value : value; } |
| long labs(long value) { return value < 0 ? -value : value; } |
| long long llabs(long long value) { return value < 0 ? -value : value; } |
| |
| div_t div(int numerator, int denominator) { |
| div_t result = {numerator / denominator, numerator % denominator}; |
| return result; |
| } |
| |
| ldiv_t ldiv(long numerator, long denominator) { |
| ldiv_t result = {numerator / denominator, numerator % denominator}; |
| return result; |
| } |
| |
| lldiv_t lldiv(long long numerator, long long denominator) { |
| lldiv_t result = {numerator / denominator, numerator % denominator}; |
| return result; |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // Pseudo-random numbers |
| //===----------------------------------------------------------------------===// |
| |
| // Simple LCG — not cryptographic, not for security use. IREE has its own |
| // CSPRNG (iree_csprng_fill) backed by crypto.getRandomValues for real |
| // randomness. This is only for code that calls rand() directly (e.g., some |
| // test utilities). |
| static unsigned int rand_state = 1; |
| |
| int rand(void) { |
| rand_state = rand_state * 1103515245u + 12345u; |
| return (int)((rand_state >> 16) & 0x7fff); |
| } |
| |
| void srand(unsigned int seed) { rand_state = seed; } |
| |
| //===----------------------------------------------------------------------===// |
| // Environment |
| //===----------------------------------------------------------------------===// |
| |
| // No environment variables in freestanding wasm. |
| char* getenv(const char* name) { |
| (void)name; |
| return NULL; |
| } |
| |
| // No temporary files in freestanding wasm. |
| int mkstemp(char* template_string) { |
| (void)template_string; |
| return -1; |
| } |