|
компилятор ТСС. Tiny c compiler by Fabrice Bellard Описание алгоритмов
sf и df только sf содержит ненулевое значение, происходит следующая обработка: Если dbt равна VT_BOOL, вызывается vpushi() и gen_op() Если dbt содержит другое время, происходит следующая обработка: Если dbt не содержит побитовое ИЛИ VT_INT и VT_UNSIGNED, не содержит побитовое ИЛИ VT_LLONG VT_UNSIGNED и не содержит VT_LLONG, dbt обновляется значением VT_INT Если c содержит ненулевое значение, происходит побработака dbt Если значение равно побитовуму ИЛИ VT_LLONG и VT_UNSIGNED, или равно VT_LLONG, управление прередается на метку do_ftoi Если значение равно побитовуму ИЛИ VT_INT и VT_UNSIGNED, происходит обработка sbt Если значение кодирует VT_FLOAT, в поле ui структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу unsigned int Если значение кодирует VT_DOUBLE, в поле ui структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу unsigned int Если значение кодирует VT_LDOUBLE, в поле ui структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу unsigned int Если dbt содержит другое значение, запускается другая обработка sbt Если значение кодирует VT_FLOAT, в поле i структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу int Если значение кодирует VT_DOUBLE, в поле i структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу int Если значение кодирует VT_LDOUBLE, в поле i структуры СValue последней SValue записывается значение поля d той же СValue. Перед этим значение приводится к типу int Если c содержит нулевое значение, запускается gen_cvt_ftoi1(). Этот запуск предваряет метка do_ftoi Если dbt содержит VT_INT и биты переданного типа содержат биты побитового ИЛИ VT_BTYPE и VT_UNSIGNED отличные от тех что содержатся в dbt, то поле t структуры CType связанной с последней SValue, вызывается gen_cast() Если sf и и df содержат нулевые значения, проверяется кодирует ли dbt значение VT_LLONG, если проверки проходят, но при этом sbt кодирует тип отличный от VT_LLONG, происходит следующая обработка: Если c содержит ненулевое значение, проверяется содержит ли sbt побитовое ИЛИ VT_INT и VT_UNSIGNED. В этом случае в поле ll структуры СValue последней SValue записывается значение поля ui той же СValue, иначе в поле ll структуры СValue последней SValue записывается значение поля i той же СValue Если c содержит нулевое значение, вызывается gv(). Если sbt побитовое ИЛИ VT_INT и VT_UNSIGNED, вызывается vpushi() и gv(R) иначе вызываются gv_dup(), vpushi(), gen_op() Поле r2 предпоследней SValue обновляется значением поля r последней SValue. Вызывается vpop() Если предидущая проверка dbt не проходит, проверяется содержит ли она VT_BOOL в этом случае вызываются vpushi(0) и gen_op() Если предидущая проверка dbt не проходит, проверяется кодирует ли она VT_BYTE или VT_SHORT. В этом случае вызывается force_charshort_cast( |
|
|