summaryrefslogtreecommitdiff
path: root/doc/mcpu-cpp-ru.md
diff options
context:
space:
mode:
authorkx <kx@radix-linux.su>2026-10-12 10:22:27 +0300
committerkx <kx@radix-linux.su>2026-10-12 10:22:27 +0300
commitb4112b093b6f58512f7ce9992e0891515831ca57 (patch)
treed78b7cd151863fb98ee3c6c9a8fc3121d05b2e51 /doc/mcpu-cpp-ru.md
parent4bc055294368e4dd4fda491dfd97772e8e88fc35 (diff)
downloadmcpu-cpp-b4112b093b6f58512f7ce9992e0891515831ca57.tar.xz
HOST machine-dependent predefined macros
Diffstat (limited to 'doc/mcpu-cpp-ru.md')
-rw-r--r--doc/mcpu-cpp-ru.md72
1 files changed, 51 insertions, 21 deletions
diff --git a/doc/mcpu-cpp-ru.md b/doc/mcpu-cpp-ru.md
index 662ff2c..f3884da 100644
--- a/doc/mcpu-cpp-ru.md
+++ b/doc/mcpu-cpp-ru.md
@@ -1274,6 +1274,10 @@ frontend/driver, его version contract будет определён отдеÐ
проверенные приёмы из `LibMPU`/`LibMPUIO` `acsite.m4`: GCC predefined macros
определяют native type sizes, byte/word order и machine-register width, а
установленный `<libmpu.h>` является окончательным источником настроек LibMPU.
+Эти проверки GCC и LibMPU описывают среду сборки HOST, но не целевой MCPU ABI.
+Источником истины для MCPU ABI служат архитектура LibMCPU и её ABI-контракты;
+предопределённые макро, зависящие от HOST, не должны определять или изменять
+разрядности целевых типов, представление указателей и правила вызовов.
В частности, фиксируются и проверяются:
@@ -1355,7 +1359,7 @@ GNU/C-specific имя `__FLOAT_WORD_ORDER__` не определяется: ти
Параметры LibMPU/MCPU environment публикуются в MCPU namespace:
```text
-__MCPU_MACHINE_REGISTER_WIDTH__
+__MCPU_HOST_MACHINE_REGISTER_WIDTH__
__MCPU_REAL_IO_LIMIT__
__MCPU_MATH_FN_LIMIT__
__MCPU_INT_MAX_WIDTH__
@@ -1364,35 +1368,61 @@ __MCPU_COMPLEX_MAX_WIDTH__
```
`__MCPU_INT_MAX_WIDTH__` равен `NB_I_MAX * 8`, а Real/Complex maximum width
-равен configured `MPU_REAL_IO_LIMIT`. `__MCPU_MACHINE_REGISTER_WIDTH__` является
-значением `BITS_PER_MACHINE_REGISTER` установленной LibMPU. Пределы Real I/O и
+равен configured `MPU_REAL_IO_LIMIT`. `__MCPU_HOST_MACHINE_REGISTER_WIDTH__` является
+значением `BITS_PER_MACHINE_REGISTER` установленной LibMPU и описывает HOST,
+а не разрядность архитектурного регистра MCPU. Пределы Real I/O и
math functions не смешиваются: `MPU_REAL_IO_LIMIT` определяет существование
Real/Complex type family и text conversion, а `MPU_MATH_FN_LIMIT` — наличие
математических функций соответствующей ширины.
-### 8.6. MCPU size/ssize, `ptrdiff` и pointers
+### 8.6. HOST machine size/ssize, `ptrdiff` и pointers
-Будущий язык не наследует variable-width C names `short`, `int`, `long` и
-не использует C-style имя `size_t` как часть собственного ABI. Беззнаковый
-LibMPU size type и знаковый byte-count/error type публикуются симметрично в
-MCPU namespace. Например для 64-bit configured profile:
+Будущий язык не наследует variable-width C names `short`, `int`, `long`, а
+HOST-типы C `size_t` и `ssize_t` не определяют целевой MCPU ABI. Следующие
+девять предопределённых макро сообщают характеристики HOST-машины, на которой
+работает виртуальный процессор MCPU:
```text
-#define __MCPU_SIZE_TYPE__ uint64
-#define __MCPU_SIZE_WIDTH__ 64
-#define __MCPU_SIZEOF_SIZE__ 8
-#define __MCPU_SIZE_MAX__ 0xffffffffffffffff
+__MCPU_HOST_MACHINE_REGISTER_WIDTH__
+__MCPU_HOST_MACHINE_SIZEOF_SIZE__
+__MCPU_HOST_MACHINE_SIZEOF_SSIZE__
+__MCPU_HOST_MACHINE_SIZE_MAX__
+__MCPU_HOST_MACHINE_SIZE_TYPE__
+__MCPU_HOST_MACHINE_SIZE_WIDTH__
+__MCPU_HOST_MACHINE_SSIZE_MAX__
+__MCPU_HOST_MACHINE_SSIZE_TYPE__
+__MCPU_HOST_MACHINE_SSIZE_WIDTH__
+```
+
+Они **не являются источником истины для MCPU ABI**. Это дополнительные сведения
+для гостевой программы. Например, разработчик языка высокого уровня может
+осознанно выбрать целочисленный тип MCPU, совпадающий по знаковости и
+разрядности с HOST `size_t` либо `ssize_t`. Такой выбор принадлежит конкретной
+программе и не делает HOST-зависимыми указатели, целочисленную модель, память
+или соглашение о вызовах MCPU.
+
+Если на HOST `size_t` и `ssize_t` имеют ширину 32 бита, размерные подсказки
+содержат, в частности:
+
+```text
+#define __MCPU_HOST_MACHINE_SIZE_TYPE__ uint32
+#define __MCPU_HOST_MACHINE_SIZE_WIDTH__ 32
+#define __MCPU_HOST_MACHINE_SIZEOF_SIZE__ 4
+#define __MCPU_HOST_MACHINE_SIZE_MAX__ 0xffffffff
-#define __MCPU_SSIZE_TYPE__ int64
-#define __MCPU_SSIZE_WIDTH__ 64
-#define __MCPU_SIZEOF_SSIZE__ 8
-#define __MCPU_SSIZE_MAX__ 0x7fffffffffffffff
+#define __MCPU_HOST_MACHINE_SSIZE_TYPE__ int32
+#define __MCPU_HOST_MACHINE_SSIZE_WIDTH__ 32
+#define __MCPU_HOST_MACHINE_SIZEOF_SSIZE__ 4
+#define __MCPU_HOST_MACHINE_SSIZE_MAX__ 0x7fffffff
```
-Это MCPU-specific family, а не попытка приписать GNU CPP несуществующий
-стандартный `__SSIZE_*` contract.
+На HOST с 64-битными `size_t` и `ssize_t` те же имена обозначают `uint64`/`int64`,
+ширину `64`, размер `8` и соответствующие максимумы
+`0xffffffffffffffff`/`0x7fffffffffffffff`. Ширина HOST-регистра определяется
+независимо и не выводится из `size_t`.
-MCPU pointer ABI от host не зависит: PTR64 всегда имеет ширину 64 бита:
+MCPU pointer ABI **не зависит от HOST**: PTR64 всегда имеет ширину 64 бита,
+включая HOST с 32-битным `size_t`:
```text
#define __INTPTR_TYPE__ int64
@@ -1405,8 +1435,8 @@ MCPU pointer ABI от host не зависит: PTR64 всегда имеет ш
#define __MCPU_POINTER_WIDTH__ 64
```
-Разность MCPU pointers является знаковой и также фиксирована независимо от
-host:
+Разность MCPU pointers является знаковой и также имеет фиксированную
+разрядность независимо от HOST:
```text
#define __PTRDIFF_TYPE__ int64