I’m not 100% convinced that the markup order of form inputs is that significant. From what I understand, the screen reader software reads the entire form and places it in its own internal buffer. The output is then rendered from the buffer according to the software’s own logic rules and/or any user configuration. I suspect that text direction in the rendered output may be controlled by a localised language setting rather than the markup itself.
One other important point is text outside of labels.
Many people don’t realise that JAWS or Job Access With Speech has 2 distinct modes – Virtual cursor (normal reading mode) and Forms mode. When in Forms mode, JAWS will NOT render any text that is within ‹form›…‹/form› but NOT associated with a form control (ie within ‹label›…‹/label› or ‹legend›). So additional form information (such as “required” or the format for a date input) must be within a label or the JAWS user won’t hear it unless they make 2 passes over the form – once in Forms mode
(for the inputs/labels) and again using Virtual cursor (for any other text).
So, ideally, place all text in a form within a label or legend. If that’s not possible, place it BEFORE the form, so that JAWS users hear it before they go into Forms mode and start trying to fill your form in.