LINUX.ORG.RU
Ответ на: комментарий от tensai_cirno

Зачем ты хочешь push & pop?

Это не я. Начальник захотел хранить стек не в массиве, а в хардварном стеке. Программа на Си.

Вот я и задумался. За современными тенденциями асма и компиляторов не слежу.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

захотел хранить стек

Я эмулирую стек в массиве для выполнения развернутой в цикл while рекурсии.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Я эмулирую стек в массиве для выполнения развернутой в цикл while рекурсии.

Я-то думал что тут тег «вещества»..

Почему не использовать рекурсию?
Он думает аппаратный стек быстрее массива?

А вообще компилятор стек должен трогать только в перед вызовом функции, в начале функции и в ее конце. Использовать push/pop «от фонаря» ему совсем не эффективно.

Хотя идея и бредовая, но ничего страшного случится не должно. Но каждую компиляцию всё равно нужно будет проверять отладчиком/дизассемблером :)

Galant
()
Ответ на: комментарий от pacify

современными тенденциями асма

/0

anonymous
()
Ответ на: комментарий от pacify

YDIW

Berkeley has taken the C language in some new directions. They have relaxed some restrictions on compiled programs. Most notably, variables can be almost any length and need not be unique in the first seven or eight characters. While this sounds handy, it is a major annoyance to the rest of the world, which has to change programs written with such `features' in order even to compile them. Berkeley programmers also tend to rely to an unprecedented extent on the `asm' keyword, which allows you to interpolate assembler language code into the middle of the C program, for an increase in micro-efficiency but with a tremendous loss of portability. To preserve portability, the programmer should use #define to include in the source code both an assembler version and a portable C version. But the latter is often omitted. A fine example was shown in a talk by Mike Tilson of Toronto's Human Computing Resources at the San Diego USENIX Conference in January, 1983 (reprinted in the November, 1984 final issue of Microsystems). Here's the code:

to = bp->b_ptr; asm(«movc3 r8,(r11),(r7)»); bp->b_ptr += put;

What it does is left as an exercise to the reader. The writer of this code left no clues to how his mayhem works. As Mike says: ``The variable ``to" is one of the registers used in this VAX assembly instruction. You guess which." Oh, we almost forgot. The three lines above are Copyright © 1980 by the Regents of the University of California.

from 4.2 The C Language
from 4 Compilers, Languages, Tools
from http://www.darwinsys.com/history/hist.html

qulinxao ★★☆
()
Ответ на: комментарий от pacify

фигасе, итаниум на асме программировать :) там же что-то жуткое-ужасное, VLIW архитектура, по 3 операции в каждую инструкцию упакованные и все такое :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

фигасе, итаниум на асме программировать :)

Заказчик хочет договориться с ребятами из Интела, чтобы для него запрограммировали алгоритмы под этот проц. Может что у него и получится.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Начальник захотел хранить стек не в массиве, а в хардварном стеке. Программа на Си.

Напиши обертку для доступа к массиву, внутри сделай ассемблерные функции

annulen ★★★★★
()
Ответ на: комментарий от pacify

Не слабо. Челябинские мужики тихо курят в сторонке :)

annulen ★★★★★
()
Ответ на: комментарий от pacify

никто не умеет программировать итаниумы на ассемблере, кроме самого интела? :)

Harald ★★★★★
()
Ответ на: комментарий от pacify

А alloca не спасет?

Интересно, как поступит gcc, если есть вставка с использованием push/pop и стековых переменных, а в настройках компиляции отключен кадр стека...

ien
()
Ответ на: комментарий от pacify

ok. главное чтобы бесполезной работой не заниматься :)

qnikst ★★★★★
()
Ответ на: комментарий от tensai_cirno

Зачем ты хочешь push & pop?

ну например динамическая сборка строки формата для функции printf строку формата то собрать проблем нет а вот количество аргументов будь добр во время компиляции укажи с помощью ассемблера этих самых push & pop можно в зависимости от строки формата динамически сформировать аргументы в стеке когда то давно я такое делал ... работало...

или например представим скриптовой язык у тебя есть аргументы и функция которую надо вызвать без ассемблера не обойтись придется затолкать все аргументы в стек и вызвать функцию забрать результат и вернуть в скрипт

anonymous
()
Ответ на: комментарий от pacify

Начальник захотел хранить стек не в массиве, а в хардварном стеке.

Что такое хардварный стек?

anonymous
()
Ответ на: комментарий от anonymous

Это стек, указатель которого является специально выделенным регистром процессора, и операции с которым выполняют специально спроектированные машинные инструкции.

Xenesz ★★★★
()
Ответ на: комментарий от pacify

Заказчик хочет договориться с ребятами из Интела, чтобы для него запрограммировали алгоритмы под этот проц.

Нехай попробует раскрутить на модель проца с дополнительным стеком возвратов :)

Xenesz ★★★★
()
Ответ на: комментарий от anonymous

Ты что-то много не так делал.

anonymous
()
Ответ на: комментарий от pacify

alloca выше правильно предложили. И не надо ассемблерных вставок.

P.S. начальник --- идидот.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.