Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.08.24;
Скачать: [xml.tar.bz2];

Вниз

case(switch) под ARM   Найти похожие ветки 

 
DevilDevil ©   (2014-01-22 23:56) [0]

Ребят, посмотрите пожалуйста в дебагере как под ARM осуществляется case(switch). Например такой код:

function Test(const X: integer): integer;
begin
 case X of
   0: Result := 0;
   1: Result := 5;
   2: Result := -5;
   3: Result := 500;
   4: Result := 100;
   5: Result := 100500;
 else
   Result := -100500;
 end;
end;


Мне интересно как там принято организовывать таблицу указателей. Если в опциях компилятора есть варианты оптимизации по скорости/размеру - то посмотреть результат в обоих случаях.


 
DevilDevil ©   (2014-01-23 00:00) [1]

В частности меня интересует, приняты ли такие команды как TBB, TBH


 
Eraser ©   (2014-01-23 04:36) [2]


> DevilDevil ©   (22.01.14 23:56) 

а самому что мешает глянуть то? )


 
картман ©   (2014-01-23 09:01) [3]


> а самому что мешает глянуть то? )

время компиляции и размер экзешника))


 
DevilDevil ©   (2014-01-23 09:28) [4]

Ну у меня нет XE5
А для того чтобы его скачать и установить на работе - придётся пройти ряд бюрократических этапов. Дома комп слабый, боюсь XE5 не встанет :)

Ну и время компиляции с размером экзешника естественно тоже являются преградами ))


 
jumping jack   (2014-01-23 10:04) [5]

> боюсь XE5 не встанет

у егорки одни отговорки
бояться не стыдно, стыдно так и не попробовать
и напрягать людей по пустякам ("в беде" люди всегда помочь рады, а так...)


 
DevilDevil ©   (2014-01-23 10:08) [6]

Удалено модератором


 
clickmaker ©   (2014-01-23 10:11) [7]

так стыдно же признаваться, что ХЕ 5 до сих пор нету...


 
DevilDevil ©   (2014-01-23 10:21) [8]

Удалено модератором


 
DevilDevil ©   (2014-01-23 10:23) [9]

Удалено модератором


 
jumping jack   (2014-01-23 10:45) [10]

Удалено модератором


 
DevilDevil ©   (2014-01-23 10:54) [11]

Удалено модератором


 
jumping jack   (2014-01-23 11:10) [12]

Удалено модератором


 
Rouse_ ©   (2014-01-23 18:39) [13]

Для истории...

Для кода:

int test(int X)
{
 switch (X) {
   case 0:
      return 0;
   case 1:
      return 5;
   case 2:
      return -5;
   case 3:
      return 500;
   case 4:
      return 100;
   case 5:
      return 100500;
   default:
     return -100500;    
 }
}


генерируется:

.text:00000000                 EXPORT test
.text:00000000 test
.text:00000000                 CMP     R0, #5
.text:00000004                 LDRLS   R3, =CSWTCH.3
.text:00000008                 LDRLS   R0, [R3,R0,LSL#2]
.text:0000000C                 LDRHI   R0, =0xFFFE776C
.text:00000010                 BX      LR
.text:00000010 ; End of function test
.text:00000010
.text:00000010 ; ---------------------------------------------------------------------------
.text:00000014 off_14          DCD CSWTCH.3            ; DATA XREF: test+4r
.text:00000018 dword_18        DCD 0xFFFE776C          ; DATA XREF: test+Cr
.text:00000018 ; .text         ends


+ таблица:

.rodata:0000003C ; ===========================================================================
.rodata:0000003C
.rodata:0000003C ; Segment type: Pure data
.rodata:0000003C                 AREA .rodata, DATA, READONLY
.rodata:0000003C                 ; ORG 0x3C
.rodata:0000003C CSWTCH.3        DCB 0, 0, 0, 0, 5, 0, 0, 0, 0xFB, 0xFF, 0xFF, 0xFF, 0xF4
.rodata:0000003C                                         ; DATA XREF: .text:off_14o
.rodata:0000003C                                         ; .text.startup:off_34o
.rodata:0000003C                 DCB 1, 0, 0, 0x64, 0, 0, 0, 0x94, 0x88, 1, 0
.rodata:0000003C ; .rodata       ends
.rodata:0000003C
.rodata:0000003C                 END


Для кода:

int test(int* X, int* Y)
{
 switch (*X) {
   case 0:
      {*X = *X+1; return 0;}
   case 1:
      {*Y = *Y-1; return 5;}
   case 2:
      {*X = *X+*Y; return -5;}
   case 3:
      {*Y = *Y+*X; return 500;}
   case 4:
      {*X = (*X)*(*Y); return 100;}
   case 5:
      {*Y = *Y / *X; return 100500;}
   default:
     return -100500;    
 }
}


Вот это:

.text:00000000
.text:00000000                 EXPORT test
.text:00000000 test                                    ; CODE XREF: main+Cp
.text:00000000                 LDR     R3, [R0]
.text:00000004                 STMFD   SP!, {R4,LR}
.text:00000008                 MOV     R4, R1
.text:0000000C                 CMP     R3, #5          ; switch 6 cases
.text:00000010                 LDRLS   PC, [PC,R3,LSL#2] ; switch jump
.text:00000014                 B       loc_A8          ; default
.text:00000014 ; ---------------------------------------------------------------------------
.text:00000018                 DCD loc_30              ; jump table for switch statement
.text:00000018                 DCD loc_40
.text:00000018                 DCD loc_54
.text:00000018                 DCD loc_68
.text:00000018                 DCD loc_7C
.text:00000018                 DCD loc_90
.text:00000030 ; ---------------------------------------------------------------------------
.text:00000030
.text:00000030 loc_30                                  ; CODE XREF: test+10j
.text:00000030                                         ; DATA XREF: test+18o
.text:00000030                 MOV     R3, #1          ; jumptable 00000010 case 0
.text:00000034                 STR     R3, [R0]
.text:00000038                 MOV     R0, #0
.text:0000003C                 B       loc_AC
.text:00000040 ; ---------------------------------------------------------------------------
.text:00000040
.text:00000040 loc_40                                  ; CODE XREF: test+10j
.text:00000040                                         ; DATA XREF: test+18o
.text:00000040                 LDR     R3, [R1]        ; jumptable 00000010 case 1
.text:00000044                 SUB     R3, R3, #1
.text:00000048                 STR     R3, [R1]
.text:0000004C                 MOV     R0, #5
.text:00000050                 B       loc_AC
.text:00000054 ; ---------------------------------------------------------------------------
.text:00000054
.text:00000054 loc_54                                  ; CODE XREF: test+10j
.text:00000054                                         ; DATA XREF: test+18o
.text:00000054                 LDR     R3, [R1]        ; jumptable 00000010 case 2
.text:00000058                 ADD     R3, R3, #2
.text:0000005C                 STR     R3, [R0]
.text:00000060                 MOVL    R0, 0xFFFFFFFB
.text:00000064                 B       loc_AC
.text:00000068 ; ---------------------------------------------------------------------------
.text:00000068
.text:00000068 loc_68                                  ; CODE XREF: test+10j
.text:00000068                                         ; DATA XREF: test+18o
.text:00000068                 LDR     R3, [R1]        ; jumptable 00000010 case 3
.text:0000006C                 ADD     R3, R3, #3
.text:00000070                 STR     R3, [R1]
.text:00000074                 MOV     R0, #0x1F4
.text:00000078                 B       loc_AC
.text:0000007C ; ---------------------------------------------------------------------------
.text:0000007C
.text:0000007C loc_7C                                  ; CODE XREF: test+10j
.text:0000007C                                         ; DATA XREF: test+18o
.text:0000007C                 LDR     R3, [R1]        ; jumptable 00000010 case 4
.text:00000080                 MOV     R3, R3,LSL#2
.text:00000084                 STR     R3, [R0]
.text:00000088                 MOV     R0, #0x64 ; "d"
.text:0000008C                 B       loc_AC
.text:00000090 ; ---------------------------------------------------------------------------
.text:00000090
.text:00000090 loc_90                                  ; CODE XREF: test+10j
.text:00000090                                         ; DATA XREF: test+18o
.text:00000090                 LDR     R0, [R1]        ; jumptable 00000010 case 5
.text:00000094                 MOV     R1, #5
.text:00000098                 BL      __aeabi_idiv
.text:0000009C                 STR     R0, [R4]
.text:000000A0                 LDR     R0, =0x18894
.text:000000A4                 B       loc_AC
.text:000000A8 ; ---------------------------------------------------------------------------
.text:000000A8
.text:000000A8 loc_A8                                  ; CODE XREF: test+14j
.text:000000A8                 LDR     R0, =0xFFFE776C ; default
.text:000000AC
.text:000000AC loc_AC                                  ; CODE XREF: test+3Cj
.text:000000AC                                         ; test+50j ...
.text:000000AC                 LDMFD   SP!, {R4,LR}
.text:000000B0                 BX      LR
.text:000000B0 ; End of function test
.text:000000B0
.text:000000B0 ; ---------------------------------------------------------------------------
.text:000000B4 dword_B4        DCD 0x18894             ; DATA XREF: test+A0r
.text:000000B8 dword_B8        DCD 0xFFFE776C          ; DATA XREF: test:loc_A8r
.text:000000B8 ; .text         ends
.text:000000B8


В обоих случаях оптимизация на размер, компилятор YAGARTO


 
DevilDevil ©   (2014-01-24 11:50) [14]

Да, сколько нервов нужно, чтобы работать в XE5
Может конечно комп слишком слабый (i3), может касперыч всё затормаживает... Но это просто ужас
Нашёл одну Lite-сборку, попробовал установить - всё прошло нормально, видимо отделался малой кровью

Теперь объясните мне (пожалуйста) как запускать и отлаживать под ведроидом. Я даже не буду говорить, сколько мегабайт он занимает и сколько времени компилится. Накидал кнопку и лейбл на форму, запускаю - в эмуляторе всё чёрное. Ставлю брейкпоинт на OnCreate - не останавливается. Чё за фигня то ?


 
Kerk ©   (2014-01-24 11:54) [15]

Отлаживай на реальном устройстве. В интернетах есть смельчаки, заставившие работать эмулятор или прикрутившие другой эмулятор - Гугл даст тебе полный поименный список - но таких мало.

По своему опыту могу сказать, что если у тебя XE5 тормозит, то про эмулятор лучше забудь.


 
Kerk ©   (2014-01-24 11:57) [16]

А черный экран ты видел просто потому, что не дождался запуска.


 
DevilDevil ©   (2014-01-24 11:58) [17]

> Kerk ©   (24.01.14 11:54) [15]

А что если "реального устройства" нет, а нужно посмотреть асм-код, который генерируется ?


 
Kerk ©   (2014-01-24 12:07) [18]

Кнопка Build работает и без устройства. Можно попробовать смотреть получившийся .so-файл каким-нибудь дизассемблером. Не знаю насколько тебе такой вариант подойдет, но я не вижу как еще можно...


 
DevilDevil ©   (2014-01-24 12:30) [19]

Дьявол создал XE5... Но я к этому не причастен
Эмулятор до сих пор не загрузился


 
Eraser ©   (2014-01-24 12:31) [20]


> DevilDevil ©   (24.01.14 11:50) [14]


> Нашёл одну Lite-сборку, попробовал установить - всё прошло
> нормально, видимо отделался малой кровью
>

зачем? скачай триал, когда закончится, зарегай еще, так можно делать бесконечно.


> Теперь объясните мне (пожалуйста) как запускать и отлаживать
> под ведроидом.

в справке все написано.


> в эмуляторе всё чёрное

тоже есть описание на сайте почему, да и я тут выкладывал как починить со скриншотом.

в целом заниматься разработкой под андроид на эмуляторе почти не реально. не из-за того, что Делфи плохая, а из-за паршивого эмулятора. поучились бы лучше у эппл, как эмуляторы делать. так что покупай смартфон, благо сейчас копейки стоит.


> Я даже не буду говорить, сколько мегабайт он занимает и
> сколько времени компилится

привыкли, что на делфи все мгновенно билдится, вот теперь получайте, как у остального мира всегда было )


 
DevilDevil ©   (2014-01-24 12:41) [21]

видимо буду покупать дивайс с ведроидом


 
DevilDevil ©   (2014-01-24 14:28) [22]

Прошёл ещё час, а эмулятор так и не запустился. В общем компьютер перезагрузил, больше дебажить андроид через эмулятор не буду :)

Ребят, пока я не купил девайс, может посмотрите в дебагере такой код:
function Test(var X: integer): integer;
begin
case X of
  0: Result := 0;
  1: begin
        Inc(X);
        Result := 5;
      end;
  2: begin
        Dec(X);
        Result := -5;
      end;
  3: begin
        X := X*X;
        Result := 500;
      end;
  4: begin
        X := X shl 2;
        Result := 100;
      end;
  5: begin
        X := X shr 3;
        Result := 100500;
      end;
else
  Result := -100500;
end;
end;


 
Inovet ©   (2014-01-24 14:46) [23]

> [22] DevilDevil ©   (24.01.14 14:28)
> Прошёл ещё час, а эмулятор так и не запустился.

А вот это действительно долго. Но, думается, что-то там не то с запуском. Уж i3 должен и не такое тянуть. А, может, ОЗУ совсем мало? А то ведь сейчас на мобильниках уже гигабайтами измеряется.


 
DevilDevil ©   (2014-01-24 15:13) [24]

2 гига


 
Eraser ©   (2014-01-24 17:58) [25]


> DevilDevil ©   (24.01.14 12:41) [21]

даже если ты запустишь эмулятор (кстати, не понимаю в чем там проблемы, у меня запустился "из коробки"), от этого легче не станет, уж поверь. так что в магазин )


 
Плохиш ©   (2014-01-24 18:56) [26]

Ну у меня эмулятор запускается, толку-то ноль. Всё равно проект в нём не запускается :-(
Т.ч. у меня всегда живой девайс подключён.

PS. Я эту xe5 уже боюсь 8-O То сама завалится, то ошибок внутренних навываливает, то свои модули в дезайне не узнаёт/находит. А приложения для андроид, вообще песня. Такое чувство, что на тестировании сильно съэкономили. Мастер-деталь неработает почти совсем, при попытке переместиться по мастеру, приложение просто закрывается :-(


 
Eraser ©   (2014-01-25 00:15) [27]

да уж.. одни писатели тут, как я погляжу )

http://docwiki.embarcadero.com/RADStudio/XE5/en/Running_Your_Android_Application_on_an_Android_Emulator


 
Пит   (2014-01-25 15:07) [28]


> Отлаживай на реальном устройстве. В интернетах есть смельчаки,
>  заставившие работать эмулятор или прикрутившие другой эмулятор

то есть, пошаговая отладка в принципе невозможна?!

В XE5 включили эмулятор, которое подавляющее большинство людей не смогли заставить работать? А как так...


 
Kerk ©   (2014-01-25 15:23) [29]


> Пит   (25.01.14 15:07) [28]
>
> > Отлаживай на реальном устройстве. В интернетах есть смельчаки,
> >  заставившие работать эмулятор или прикрутившие другой эмулятор
>
> то есть, пошаговая отладка в принципе невозможна?!

Каким образом ты пришел к такому выводу? На реальном устройстве отлаживай как хочешь. Отладка по USB - это абсолютно штатная функция андроида.

> В XE5 включили эмулятор, которое подавляющее большинство
> людей не смогли заставить работать?

В XE5 не включали никаких эмуляторов. Эмулятор - это часть гуглового Android SDK, который нужно установить, если ты в XE5 хочешь работать с андроидом. Есть и какие-то другие эмуляторы, но особо я в эту тему не вдавался.


 
Пит   (2014-01-25 15:38) [30]


> Каким образом ты пришел к такому выводу?

Да я вообще в этом не понимаю. Поэтому только догадываюсь...
Ну вот смотри, есть delphi-код. А есть некий .so я так понимаю,  то, что хавает андроид (хотя я вроде слышал про apk...).
Я запускаю на адроид-устройстве написанную программу, и как при этом её отлаживать построчно в дельфи-среде на компьютере?


> Эмулятор - это часть гуглового Android SDK

и при этом он ни у кого не работает? не понимаю...


 
Kerk ©   (2014-01-25 16:27) [31]

Абсолютно так же отлаживать, как обычно. Жмешь Run, приложение компилируется и запускается на планшете. Дальше ставишь брекпоинты и наслаждаешься.

Эмулятор у кого-то наверно работает. Я говорю исключительно о том, что вижу вокруг себя лично. Например, мои знакомые ксамаринщики этим эмулятором тоже не пользуются. Они взяли эмулятор, который эмулирует андроид на интеловском процессоре. Но Делфи пока не умеет компилить приложения под интел.


 
DevilDevil ©   (2014-01-25 17:05) [32]

Надеюсь у меня на работе получится отладка по USB
Потому что там тысяча сетевых политик доступа по USB

p.s. ведроид девайс купил :)


 
Пит   (2014-01-25 17:12) [33]


> Жмешь Run, приложение компилируется и запускается на планшете

То есть, оно компилируется на компьютер, каким-то образом сразу устанавливается на устройство и запускается удаленная отладка?


 
Inovet ©   (2014-01-25 17:17) [34]

> [33] Пит   (25.01.14 17:12)

Наверное, устройственная часть отладчика бдит.


 
Kerk ©   (2014-01-25 18:05) [35]

Да, каким-то образом через usb-кабель приложение попадает на устройство и запускается удаленная отладка.


 
Пит   (2014-01-25 19:00) [36]


> Да, каким-то образом через usb-кабель приложение попадает
> на устройство и запускается удаленная отладка.

прикалываешься надо мной? Не стоит, я правда ничего не понимаю...
Попробую сформулировать по другому, можно все настроить так, что нажимаешь F9 - и "новая" версия программы через некоторое время запускается на железке с возможностью BP в среде delphi на компе?

Или процесс более ручной?

P.S. А можешь вкратце объяснить, что такое .so и его отношение к .apk?


 
Kerk ©   (2014-01-25 19:32) [37]


> Пит   (25.01.14 19:00) [36]
>  
> > Да, каким-то образом через usb-кабель приложение попадает
> > на устройство и запускается удаленная отладка.
>
> прикалываешься надо мной? Не стоит, я правда ничего не понимаю.

Не прикалываюсь, так и работает.

> Попробую сформулировать по другому, можно все настроить
> так, что нажимаешь F9 - и "новая" версия программы через
> некоторое время запускается на железке с возможностью BP
> в среде delphi на компе?

Именно так. Работает все довольно прозрачно. Подключаешь планшет к компьютеру, он появляется в списке доступных устройств в Delphi, выбираешь его и дальше все работает так как ты описал.

> А можешь вкратце объяснить, что такое .so и его отношение
> к .apk?

.so - это сам бинарник, результат работы компилятора.

.apk - это пакет, внутри которого лежит этот бинарник, файл манифеста, сертификаты, иконки и какие-то еще нужные для запуска штуки. Насколько я понимаю, с точки зрения формата файла APK - это всего-лишь ZIP-архив.


 
DevilDevil ©   (2014-01-26 01:22) [38]

кстати RAD Studio пол ARM сохранил Little Endian доступ или нет?
я просто к другому порядку байт пока не привык
если нужно почитать что-нибудь толковое по сему поводу - скажите


 
Eraser ©   (2014-01-26 02:33) [39]


> Пит   (25.01.14 19:00) [36]

открой для себя дивный новый мир )

https://www.google.ru/search?q=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0&oq=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0&aqs=chrome..69i57j0l5.2758j0j7&sourceid=chrome&espv=210&es_sm=119&ie=UTF-8#q=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&safe=off


 
Eraser ©   (2014-01-26 02:36) [40]

а под iOS все куда веселее ) там на mac устанавливается Делфевский PAServer, который запускает удаленную отладку через XCode и по сети взаимодействует с самой Делфи (которая конечно на машине с виндой).



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2014.08.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.003 c
15-1390592076
Дмитрий СС
2014-01-24 23:34
2014.08.24
Выдача сдачи наличными.


11-1205861966
Vinum
2008-03-18 20:39
2014.08.24
Сделать кучу форм


15-1390735988
Сварщик
2014-01-26 15:33
2014.08.24
AV при попытке расшифровать файл через DecryptFileA (и W тоже)


15-1390664723
Novicer
2014-01-25 19:45
2014.08.24
Как использовать строковую переменную в SQL-запросе?


15-1390656072
Jimmy
2014-01-25 17:21
2014.08.24
Карточные игры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский