Commit 80637a6afd873791ba1766ba7b29b02aca7fd90c

Authored by blueswir1
1 parent e42c20b4

Shuffle code to avoid NetBSD gcc 3.4.6 inlining bug (Rumko)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3924 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 43 additions and 44 deletions
hw/slavio_serial.c
... ... @@ -215,7 +215,6 @@ struct SerialState {
215 215 static void handle_kbd_command(ChannelState *s, int val);
216 216 static int serial_can_receive(void *opaque);
217 217 static void serial_receive_byte(ChannelState *s, int ch);
218   -static inline void set_txint(ChannelState *s);
219 218  
220 219 static void clear_queue(void *opaque)
221 220 {
... ... @@ -321,28 +320,6 @@ static void slavio_serial_reset(void *opaque)
321 320 slavio_serial_reset_chn(&s->chn[1]);
322 321 }
323 322  
324   -static inline void clr_rxint(ChannelState *s)
325   -{
326   - s->rxint = 0;
327   - s->rxint_under_svc = 0;
328   - if (s->chn == chn_a) {
329   - if (s->wregs[W_MINTR] & MINTR_STATUSHI)
330   - s->otherchn->rregs[R_IVEC] = IVEC_HINOINT;
331   - else
332   - s->otherchn->rregs[R_IVEC] = IVEC_LONOINT;
333   - s->rregs[R_INTR] &= ~INTR_RXINTA;
334   - } else {
335   - if (s->wregs[W_MINTR] & MINTR_STATUSHI)
336   - s->rregs[R_IVEC] = IVEC_HINOINT;
337   - else
338   - s->rregs[R_IVEC] = IVEC_LONOINT;
339   - s->otherchn->rregs[R_INTR] &= ~INTR_RXINTB;
340   - }
341   - if (s->txint)
342   - set_txint(s);
343   - slavio_serial_update_irq(s);
344   -}
345   -
346 323 static inline void set_rxint(ChannelState *s)
347 324 {
348 325 s->rxint = 1;
... ... @@ -367,6 +344,49 @@ static inline void set_rxint(ChannelState *s)
367 344 slavio_serial_update_irq(s);
368 345 }
369 346  
  347 +static inline void set_txint(ChannelState *s)
  348 +{
  349 + s->txint = 1;
  350 + if (!s->rxint_under_svc) {
  351 + s->txint_under_svc = 1;
  352 + if (s->chn == chn_a) {
  353 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  354 + s->otherchn->rregs[R_IVEC] = IVEC_HITXINTA;
  355 + else
  356 + s->otherchn->rregs[R_IVEC] = IVEC_LOTXINTA;
  357 + } else {
  358 + s->rregs[R_IVEC] = IVEC_TXINTB;
  359 + }
  360 + }
  361 + if (s->chn == chn_a)
  362 + s->rregs[R_INTR] |= INTR_TXINTA;
  363 + else
  364 + s->otherchn->rregs[R_INTR] |= INTR_TXINTB;
  365 + slavio_serial_update_irq(s);
  366 +}
  367 +
  368 +static inline void clr_rxint(ChannelState *s)
  369 +{
  370 + s->rxint = 0;
  371 + s->rxint_under_svc = 0;
  372 + if (s->chn == chn_a) {
  373 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  374 + s->otherchn->rregs[R_IVEC] = IVEC_HINOINT;
  375 + else
  376 + s->otherchn->rregs[R_IVEC] = IVEC_LONOINT;
  377 + s->rregs[R_INTR] &= ~INTR_RXINTA;
  378 + } else {
  379 + if (s->wregs[W_MINTR] & MINTR_STATUSHI)
  380 + s->rregs[R_IVEC] = IVEC_HINOINT;
  381 + else
  382 + s->rregs[R_IVEC] = IVEC_LONOINT;
  383 + s->otherchn->rregs[R_INTR] &= ~INTR_RXINTB;
  384 + }
  385 + if (s->txint)
  386 + set_txint(s);
  387 + slavio_serial_update_irq(s);
  388 +}
  389 +
370 390 static inline void clr_txint(ChannelState *s)
371 391 {
372 392 s->txint = 0;
... ... @@ -389,27 +409,6 @@ static inline void clr_txint(ChannelState *s)
389 409 slavio_serial_update_irq(s);
390 410 }
391 411  
392   -static inline void set_txint(ChannelState *s)
393   -{
394   - s->txint = 1;
395   - if (!s->rxint_under_svc) {
396   - s->txint_under_svc = 1;
397   - if (s->chn == chn_a) {
398   - if (s->wregs[W_MINTR] & MINTR_STATUSHI)
399   - s->otherchn->rregs[R_IVEC] = IVEC_HITXINTA;
400   - else
401   - s->otherchn->rregs[R_IVEC] = IVEC_LOTXINTA;
402   - } else {
403   - s->rregs[R_IVEC] = IVEC_TXINTB;
404   - }
405   - }
406   - if (s->chn == chn_a)
407   - s->rregs[R_INTR] |= INTR_TXINTA;
408   - else
409   - s->otherchn->rregs[R_INTR] |= INTR_TXINTB;
410   - slavio_serial_update_irq(s);
411   -}
412   -
413 412 static void slavio_serial_update_parameters(ChannelState *s)
414 413 {
415 414 int speed, parity, data_bits, stop_bits;
... ...